正则表达式组倒序

Regular Expression group reversed order

我正在阅读一个格式非常少(如果有的话)的非常混乱的文件。我正在寻找以下两个我已经正常工作的。

我目前拥有的员工正则表达式代码:

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'

试试这个:

/.*?([A-Z][a-z]*)\s+([A-Z][a-z]*)\s+(([A-Z])([A-Z])[0-9]{5})\s+\(\S+@\S+).*/g

Regex101 演示:https://regex101.com/r/iB9vF2/2

  • 匹配 1 = 名字
  • 匹配 2 = 姓氏
  • Match3 = 员工 ID
  • Match4 =(忽略此;仅用于查找员工 ID)
  • Match5 =(忽略此;仅用于查找员工 ID)
  • 匹配 6 = 电子邮件

解释:

.*? - 忽略名字前的任何垃圾

([A-Z][a-z]*) - 名字以大写开头,后跟任意数量的小写字母

\s+ - 1 个或多个 spaces 标记名字的结尾

([A-Z][a-z]*) - 姓氏在名字之后,并遵循相同的模式

\s+ - 姓氏以 space(s)

结尾

(([A-Z])([A-Z])[0-9]{5}) - 员工 ID 跟在姓氏之后,格式为 Capital1、Capital2,然后是 5 位数字,然后是 Capital2 (match5) 和 Capital1 (match4)

\s+ - space(s)显示员工id结尾

(\S+@\S+) - @ 符号两边的非 space 字符构成电子邮件*

.* - 这只允许字符串末尾出现垃圾。它不会匹配邮件,因为 \S+ 是贪婪的,但它会迎合任何其他字符,因此也代表电子邮件的结尾。

* 注意:电子邮件正则表达式过于简单;应该足以满足您的需求,但这无法检查有效的电子邮件,因为围绕这些的规则很复杂。 延伸阅读:Using a regular expression to validate an email address