我正在尝试使用Regex.IsMatch()找到字符串和模式之间的匹配。我构建了正则表达式并使用regex101.com对其进行了测试,它运行正常。现在的问题是
Regex.IsMatch(filename, curSetting.RegExMatch.ToString());
返回true
对于相同的文件名,curSetting.RegExMatch.IsMatch(filename))
返回false。有人可以解释这有什么不同,它们之间的区别是什么?
RegExMatch
是curSetting
对象的正则表达式成员。我的案例中的测试数据是Pattern is
Gen(?!.*(?:erallog))(?<SerialNo>.+?)-(?<Year>(?:\d{2}))(?<Month>\d{2})(?<Day>\d{2})(?<Other>.*?\.log)
字符串为1_GeneralLog1370013-170403.log
。
答案 0 :(得分:2)
很明显,您的curSetting.RegExMatch
编译时带有RegexOptions.IgnoreCase
标记:(?!.*(?:erallog))
处理不区分大小写并与eralLog
中的1_GeneralLog1370013-170403.log
匹配输入字符串,因此负前瞻模式找到匹配并且无法完成整体匹配。
所以,有两种方法(取决于你需要的):
RegexOptions.IgnoreCase
将不区分大小写的内联选项(?i)
添加到模式中:
(?i)Gen(?!.*(?:erallog))(?<SerialNo>.+?)-(?<Year>(?:\d{2}))(?<Month>\d{2})(?<Day>\d{2})(?<Other>.*?\.log)