包含[:alnum:]POSIX字符类的正则表达式与字符串C#不匹配,但联机工具的计算结果为ok
我有一个正则表达式包含[:alnum:]POSIX字符类的正则表达式与字符串C#不匹配,但联机工具的计算结果为ok,c#,regex,C#,Regex,我有一个正则表达式 (?'Conpany'Company) - (?'Model'Model) - (?'Version'V(?'Major'\d+).(?'Minor'\d+).(?'Bugfix'\d+).(?'Build'\d+)(?'PreRelease'-[[:alnum:]]*)?(?'Meta'\+[[:alnum:]]*)?) - (?'CompileDate'(?'Year'\d{4})(?'Month'\d{2})(?'Day'\d{2})) 应该与SCPI字符串匹配 Co
(?'Conpany'Company) - (?'Model'Model) - (?'Version'V(?'Major'\d+).(?'Minor'\d+).(?'Bugfix'\d+).(?'Build'\d+)(?'PreRelease'-[[:alnum:]]*)?(?'Meta'\+[[:alnum:]]*)?) - (?'CompileDate'(?'Year'\d{4})(?'Month'\d{2})(?'Day'\d{2}))
应该与SCPI字符串匹配
Company - Model - V1.0.0.1718-RC1 - 20190821
如果我用一个在线工具尝试正则表达式,一切正常,字符串与正则表达式匹配
现在我试着用正则表达式和C#来计算命令答案,结果总是错误的
var regex = @"(?'Conpany'Company) - (?'Model'Model) - (?'Version'V(?'Major'\d+).(?'Minor'\d+).(?'Bugfix'\d+).(?'Build'\d+)(?'PreRelease'-[[:alnum:]]*)?(?'Meta'\+[[:alnum:]]*)?)" - (?'CompileDate'(?'Year'\d{4})(?'Month'\d{2})(?'Day'\d{2}))";
//
responce = await rs232Device.SendCommand(query, DefaultTimeout);
var match = Regex.Match(responce.Message, regex, RegexOptions.IgnoreCase);
//
Assert.That(match.Success, Is.True);
我从正则表达式中发现编译日期-(?'CompileDate'(?'Year'\d{4})(?'Month'\d{2})(?'Day'\d{2}))
一切正常
但是我不知道为什么它不能与C中的完整正则表达式一起工作,因为它可以匹配字符串。.NET正则表达式引擎不支持POSIX字符类。这里有
[[:alnum:][]
,用\w
(任意)或[\p{L}\p{N}]
(任意字母或数字)或[^\w\p{Pc}]
(除连接器标点以外的任何字符,如\u
)将使其工作
请参阅其他POSIX字符类示例映射(它们可能无法完全相同但至少类似地工作):
见
使用与.NET兼容的测试仪。.NET正则表达式不支持POSIX字符类,您在这里有
[[:alnum:]
,将其替换为[^\W\p{Pc}]
或\W
将使其正常工作。除此之外,避开文字点。
POSIX .NET Description
[:alpha:] \p{L} Any letters (\p{L} matches only those from the BMP plane)
[:alnum:] [\p{L}\p{N}] Any letters or digits
[:digit:] \p{N} or \d Any digits (there is also a [:d:] POSIX variation)
[:space:] \s or \p{Z} Any whitespace
[:blank:] [\p{Zs}\t] Any horizontal whitespace
POSIX .NET Description
[:ascii:] [\x00-\x7E] ASCII character set
[:xdigit:] [0-9a-fA-F] Chars that are used to define hex values
(?'Conpany'Company) - (?'Model'Model) - (?'Version'V(?'Major'\d+)\.(?'Minor'\d+)\.(?'Bugfix'\d+)\.(?'Build'\d+)(?'PreRelease'-\w*)?(?'Meta'\+\w*)?) - (?'CompileDate'(?'Year'\d{4})(?'Month'\d{2})(?'Day'\d{2}))