gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:44:19 24 4
gpt4 key购买 nike

我正在尝试使用 Regex.IsMatch() 查找字符串和模式之间的匹配项。我构建了正则表达式并使用 regex101.com 对其进行了测试,它工作正常。现在的问题是Regex.IsMatch(filename, curSetting.RegExMatch.ToString()); 返回真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

最佳答案

很明显你的curSetting.RegExMatch使用 RegexOptions.IgnoreCase 编译标志:(?!.*(?:erallog))不区分大小写处理并匹配 eralLog在你的1_GeneralLog1370013-170403.log输入字符串,因此否定先行模式找到一个匹配项并使整体匹配失败。

因此,有 2 种出路(取决于您的需要):

  • 要么删除 RegexOptions.IgnoreCase从正则表达式对象初始化或
  • 添加不区分大小写的内联选项 (?i)进入模式:

    (?i)Gen(?!.*(?:erallog))(?<SerialNo>.+?)-(?<Year>(?:\d{2}))(?<Mo‌nth>\d{2})(?<Day>\d{2})(?<Other>.*?\.log)

关于c# - Regex.IsMatch 在 C# 中返回两个不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43735268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com