【问题标题】:Regex Help for Account Details帐户详细信息的正则表达式帮助
【发布时间】:2018-12-03 18:26:52
【问题描述】:

我有一个格式如下的文本文件

======= Account Info =======
email.example@gmail.com:examplepass
Subscription:sub Type
Expiration date:12/21/18
Country:US
Renew Charge:$14.99 + tax
DOB:8/18/73
Created By Athena
============================

======= Account Info =======
email.emaple2@yahoo.com:passExample00
Subscription:sub Type
Expiration date:12/5/18
Country:US
Renew Charge:$14.99 + tax
DOB:8/5/74
Created By Athena
============================

如何使用正则表达式来获取电子邮件:以这种格式传递

email.example@gmail.com:examplepass
email.emaple2@yahoo.com:passExample00

【问题讨论】:

  • 您需要使您的要求更加精确——该行是否总是以“电子邮件”开头?或者电子邮件和密码都是完全动态的?还有哪些字符是允许/不允许的?
  • 完全动态。两者都允许使用所有字符
  • 你可能想编辑你的问题并添加这个(非常重要的)细节。

标签: regex notepad++ text-files


【解决方案1】:

您对此有任何尝试吗?

你可以试试:

^email:\w+$

根据您的编辑,更全面的正则表达式将是

(^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}):\w+

【讨论】:

  • 感谢您的回答。更新了帖子。我认为我没有正确提出问题,但已修复
【解决方案2】:

根据您的评论,您需要一个相当不受限制的模式。试试这些:

1) 选择“帐户信息”行和“订阅”行之间的所有内容。您需要选中“.matches newline”复选框才能使其正常工作。

(?<=Account Info =======\r\n)(.+?)(?=\r\nSubscription)

这对“Account Info =======”进行了积极的回溯,对“订阅”进行了积极的前瞻,并盲目地选择了介于两者之间的所有内容(换行符除外)。

[注意:Notepad++ 显然不允许变长后视,因此您需要指定帐户信息的完整字符串。如果你在基于 Unix 的系统上,你可能需要去掉 "\r"s]

缺点:如果您在查找的两行之间有电子邮件和密码以外的任何其他内容,则可能会失败。

2) 选择 @: 一行中的所有内容

^.+?@.+?:.+

缺点:如果您有另一行恰好同时具有@:,则可能会失败

【讨论】:

    【解决方案3】:
    • Ctrl+F
    • 查找内容:\S+@\S+
    • 检查环绕
    • 检查正则表达式
    • 在文档中搜索

    说明:

    \S+     # 1 or more any character that is not a space
    @       # literally @
    \S+     # 1 or more any character that is not a space
    

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多