我正在阅读一个非常混乱的文件,格式很少(如果有的话)。我正在寻找以下两个我正常工作的。
我目前为Employee正则表达式编写的代码:
string employeeNumber = @"(?<grp1>[A-Z]{2})[0-9]{5}[A-Z]{2}";
这会找到所需的值,但也会找到无效的员工编号,因为它实际上并没有按相反的顺序查找前两个大写字母。
我最终想要的是如何仅以相反的顺序使用<grp1>
。
有效员工编号 XY12345YX 。
的示例我找不到任何类型的正则表达式组反转的好文档。任何想法都会很棒!
修改
这是我正在阅读的文本文档中的一行示例。
'Name list from PQP-97 system &%$ Bill Williams MK12345KM bwilliams01@msn.com ^ %20%
Fredericka Hanover GW22887WG freddie@verizon.net'
答案 0 :(得分:2)
试试这个:
/.*?([A-Z][a-z]*)\s+([A-Z][a-z]*)\s+(([A-Z])([A-Z])[0-9]{5}\5\4)\s+\(\S+@\S+).*/g
Regex101演示:https://regex101.com/r/iB9vF2/2
<强>解释强>
.*?
- 忽略名字前的任何垃圾
([A-Z][a-z]*)
- 名字以大写字母开头,后跟任意数量的小写字母
\s+
- 1个或多个空格标记名字的末尾
([A-Z][a-z]*)
- 姓氏遵循名字,并遵循相同的模式
\s+
- 姓氏以空格终止
(([A-Z])([A-Z])[0-9]{5}\5\4)
- 员工ID跟随姓氏,格式为Capital1,Capital2则为5位数,然后重复Capital2(match5)和Capital1(match4)
\s+
- space(s)显示员工ID的结尾
(\S+@\S+)
- @符号两侧的非空格字符构成电子邮件*
.*
- 这只是允许字符串末尾的垃圾。它与邮件不匹配,因为\S+
是贪婪的,但它会迎合任何其他角色,因此也代表电子邮件的结尾。
*注意:电子邮件正则表达式过于简单;应该足以满足您的需求,但这无法检查有效的电子邮件,因为围绕这些的规则很复杂。 进一步阅读:Using a regular expression to validate an email address