C# Regex.IsMatch在C中返回两个不同的输出#
我正在尝试使用Regex.IsMatch()查找字符串和模式之间的匹配。我构建了regex框架,并使用regex101.com对其进行了测试,效果很好。现在的问题是C# Regex.IsMatch在C中返回两个不同的输出#,c#,regex,C#,Regex,我正在尝试使用Regex.IsMatch()查找字符串和模式之间的匹配。我构建了regex框架,并使用regex101.com对其进行了测试,效果很好。现在的问题是 Regex.IsMatch(文件名,curSetting.RegExMatch.ToString())返回true curSetting.RegExMatch.IsMatch(文件名))对同一文件名返回false。有人能解释一下这两者的区别吗?它们之间的区别是什么 RegExMatch是curseting对象的我的regex成员。在
Regex.IsMatch(文件名,curSetting.RegExMatch.ToString())代码>返回true
curSetting.RegExMatch.IsMatch(文件名))
对同一文件名返回false。有人能解释一下这两者的区别吗?它们之间的区别是什么
RegExMatch
是curseting
对象的我的regex成员。在我的例子中,测试数据是模式
Gen(?!.*(?:erallog))(?<SerialNo>.+?)-(?<Year>(?:\d{2}))(?<Month>\d{2})(?<Day>\d{2})(?<Other>.*?\.log)
Gen(?。*(?:erallog))(?+)-(?(?:\d{2}))(?\d{2})(?\d{2})(?\d{2} )(?。\.log)
该字符串是1\u generalLogic1370013-170403.log
很明显,您的curSetting.RegExMatch
是使用RegexOptions编译的。IgnoreCase
标志:(?!*(:erallog))
以不区分大小写的方式进行处理,并与1\u generalLogic1370013-170403.log
输入字符串中的eralLog
匹配,因此负前瞻模式会找到匹配项并使整体匹配失败
因此,有两种解决方法(取决于您的需要):
- 从regex对象初始化中删除
RegexOptions.IgnoreCase
,或者
- 将不区分大小写的内联选项
(?i)
添加到模式中:
(?)
请分享完整的相关代码。什么是curseting.RegExMatch
模式?什么是filename
值?当您发布模式和正在搜索的文本时,它将非常有用。也许这将帮助您知道什么类型是RegExMatch
?从未听说过它。RegExMatch
是我的regex membe在我的例子中,测试数据是模式是Gen(?.*(?:erallog))(?。+?)-(?(?:\d{2}))(?\d{2})(?\d{2})(?\d{2})(?.\.log)
string是1\u generallo1370013-170403.log
。你的curSetting.RegExMatch
编译时使用的标志是什么?我猜你使用了Regex.IgnoreCase
。那么,你现在想要什么?