当regex101执行时,RegEx C#不匹配

时间:2018-03-05 08:36:20

标签: c# regex string match

这是我的模式:

-{8}\s+((?:[0-9]{2}\/[0-9]{2}\/[0-9]{2})\s+(?:[0-9]{2}:[0-9]{2}:[0-9]{2}))\s+(?:LINE)\s+=\s+([0-9]{0,9})\s+(?:STN)\s+=\s+([0-9]{0,9})[ ]*(?:\n[ \S]*)*INCOMING CALL(?:[\S\s][^-])*

这是我的字符串:

--------   02/16/18   13:50:39   LINE = 0248   STN = 629     
       CALLING NUMBER   252
       NAME             Mar Ant
       UNKNOWN
       DNIS NUMBER      255
       BC = SPEECH
       VOIP CALL
00:00:00   INCOMING CALL    RINGING 0:09
       LINE = 0004
00:00:25   CALL RELEASED

它确实与几个在线正则表达式测试人员匹配,但与http://regexstorm.net/tester等C#测试人员不匹配,因为

  

.NET不使用Posix语法

我注意到如果我删除模式的最后一部分

INCOMING CALL(?:[\S\s][^-])*

它匹配但仍然不正确或至少不是我对它的期望。

我应该更改以使此模式与字符串匹配?

1 个答案:

答案 0 :(得分:1)

问题与模式类型无关,模式实际上不符合POSIX,因为正则表达式转义符不能在括号表达式中使用(请参阅模式中的[\S\s],可以写为.RegexOptions.Singleline选项一起使用,或(?s:.)}。

您需要在此处执行的操作是将\n替换为\r?\n(?:\r\n?|\n)以匹配Windows换行符样式。

使用

-{8}\s+((?:[0-9]{2}/[0-9]{2}/[0-9]{2})\s+(?:[0-9]{2}:[0-9]{2}:[0-9]{2}))\s+(?:LINE)\s+=\s+([0-9]{0,9})\s+(?:STN)\s+=\s+([0-9]{0,9})[ ]*(?:\r?\n[ \S]*)*INCOMING CALL(?:[\S\s][^-])*

请参阅this regex demo