C# Regex.IsMatch在C中返回两个不同的输出#

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()查找字符串和模式之间的匹配。我构建了regex框架,并使用regex101.com对其进行了测试,效果很好。现在的问题是
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
。那么,你现在想要什么?