正则表达式组颠倒顺序

梅森玩具

我正在读取非常混乱的文件,格式很少(如果有的话)。我正在寻找以下两个我能正常工作的东西。

  • 名称(第一和最后一个)工作
  • 电子邮件地址(不同类型(如.edu的.NET .COM)可能有其他人。)工作
  • 员工编号(两个大写字母,后跟5个数字值,然后与第一个字母相同,但两个字母相同,但相反)不起作用

我目前为Employee正则表达式使用的代码:

string employeeNumber = @"(?<grp1>[A-Z]{2})[0-9]{5}[A-Z]{2}";

这会找到所需的值,但也会发现无效的员工编号,因为它实际上并不是在以相反的顺序查找前两个大写字符。

最后,我要介绍的是如何<grp1>以相反的顺序使用唯一的内容。

有效员工编号XY12345YX的示例

我找不到有关任何类型的正则表达式组反转的良好文档。任何想法都会很棒!

编辑:

这是我正在阅读的文本文档中一行的示例。

'Name list from PQP-97 system &%$ Bill Williams  MK12345KM [email protected] ^ %20% 
Fredericka Hanover GW22887WG [email protected]'
约翰·贝文

试试这个:

/.*?([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

  • Match1 =名字
  • Match2 =姓氏
  • Match3 =员工编号
  • Match4 =(忽略此;仅用于查找员工ID)
  • Match5 =(忽略此;仅用于查找员工ID)
  • Match6 =电子邮件

解释:

.*? -忽略姓氏前的任何垃圾

([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+ -空格显示员工编号的结尾

(\S+@\S+) -@符号两侧的非空格字符组成了电子邮件*

.*-这仅允许在字符串末尾添加垃圾。由于\S+贪婪,它将与邮件不匹配,但是它将满足任何其他字符的需要,因此也代表了电子邮件的结尾。

*注意:电子邮件正则表达式过于简单;应该足以满足您的需求,但这无法检查有效的电子邮件,因为围绕这些电子邮件的规则很复杂。进一步阅读:使用正则表达式来验证电子邮件地址

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章