Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式组逆序_C#_Regex_Regex Group - Fatal编程技术网

C# 正则表达式组逆序

C# 正则表达式组逆序,c#,regex,regex-group,C#,Regex,Regex Group,我在一个非常混乱的文件中阅读,几乎没有(如果有的话)格式。我正在寻找以下两个我已经正常工作 工作名称(第一个和最后一个) 电子邮件地址(不同类型(如edu.net.com)也可能有其他地址)正在工作 员工编号(两个大写字母后接5位数字值,两个字母与第一个字母相同,但颠倒)不工作 我目前拥有的员工正则表达式代码: string employeeNumber = @"(?<grp1>[A-Z]{2})[0-9]{5}[A-Z]{2}"; 试试这个: /.*?([A-Z][a-z]*

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

  • 工作名称(第一个和最后一个)
  • 电子邮件地址(不同类型(如edu.net.com)也可能有其他地址)正在工作
  • 员工编号(两个大写字母后接5位数字值,两个字母与第一个字母相同,但颠倒)不工作
我目前拥有的员工正则表达式代码:

string employeeNumber = @"(?<grp1>[A-Z]{2})[0-9]{5}[A-Z]{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演示:

  • Match1=名字
  • Match2=姓氏
  • Match3=员工ID
  • 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(匹配5)和Capital1(匹配4)

\s+
-空格显示员工id的结尾

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

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

*注意:电子邮件正则表达式过于简单;应该足以满足您的需要,但这不能检查有效的电子邮件,因为这些规则很复杂。
进一步阅读:

有关您可以执行的员工编号:
([A-Z])([A-Z])[0-9]{5}\2\1
。数据之间是否有空格/分隔符/能否提供一些示例数据?因此我不会尝试在regex中完全这样做。可能将所有匹配2个大写字母和5个数字的内容读入一个有索引的数组,然后遍历该数组,并使用子字符串将它们与以下两个字母反向匹配。@johnLBevan是的,我马上在这里添加它。不过很乱。我将包括一行或两行内容。谢谢,我还有两个问题。(我想还有更多的建议)那么,我目前正在分别阅读每一个案例(姓名、电子邮件、雇员嗯),在您完成的一次匹配中返回这些案例会更好/更有效,还是我应该将它们分开?我问的另一个问题是关于雇员编号,当你获取前两个大写字母时,在该案例结束时,你是如何引用它们的,我认为我在你的示例中遗漏了/没有看到这一部分。无论如何,非常感谢你的解释,非常有帮助!我想我现在可以看到了。是不是
\5\4
?是的,就是它-计算开括号以获得匹配的顺序(忽略任何未捕获的组;虽然在本例中没有。我通过玩这个游戏在一天内了解了关于regex的大部分知识-至于是单独做事情还是一次做事情,在不了解全部上下文的情况下很难说……我这样做的好处是你只看字符串一次,而不是一次一次此外,如果你知道字段的顺序是一致的(第一、最后、员工、邮件),你会得到更多的提示,可以很容易地区分名字和姓氏,尽管两者都有相同的模式。如果数据比这更混乱,则单独处理每个字段可能会有好处。
/.*?([A-Z][a-z]*)\s+([A-Z][a-z]*)\s+(([A-Z])([A-Z])[0-9]{5}\5\4)\s+\(\S+@\S+).*/g