【问题标题】:regex.matches notmatchingregex.matches 不匹配
【发布时间】:2015-09-21 15:28:38
【问题描述】:

我试图这样做 5 个小时我绝望我会生气。 请帮帮我。

var start   =  new  List<string>( ) {"Report", "Audit"  , "Committee" } ;
string expresss= start[0] + @"(.*?)\n{0,1}(.*?)" + start[1] + @"(.*)$";
MatchCollection matches = Regex.Matches(text, "(?im)"+ expresss );

此代码找不到“审计委员会报告”

但是在这里用 sublime text3 的正则表达式可以找到它。

请帮助我通过 c# 正则表达式代码找到“审计委员会报告”。 谢谢。

【问题讨论】:

  • 不是这么简单的事情吧?
  • 在哪里创建text 变量?
  • 可能是因为linbreak:使用\r?\n。试试string expresss= start[0] + @"(.*?)\r?\n{0,1}(.*?)" + start[1] + @"(.*)$";
  • 我就是这么做的。它之前给出了相同的结果。 start[0] + @"(.*?)\r?\n{0,1}(.*?)" + start[1] + @"(.*)$"

标签: c# regex .net-2.0


【解决方案1】:

看起来这既是它区分大小写的事实,而且您没有跨多行匹配正则表达式(感谢@stribizhev 发现)。

用途:

MatchCollection matches = Regex.Matches(text, "(?im)"+ expresss,
  RegexOptions.Multiline | RegexOptions.IgnoreCase );

我无法从上下文中判断,但也值得考虑使用 RegexOptions.CultureInvariant 是否也合适。

编辑:好的,我不知道 C# 可以使用 (?im) 进行大小写 + 多行匹配。在这种情况下,如果 (?im) 没有,则不确定这对您有什么作用。我刚刚取消了测试中的选项,让 (?im) 保持打开状态,它确实匹配。

【讨论】:

  • (?im) = RegexOptions.Multiline | RegexOptions.IgnoreCase
  • (?im) 在 .NET 中不起作用,Flynn 是正确的,他需要将这些指定为 Matches 的参数。
  • 实际上我是新的,它与 multiline 相关。但我无法弄清楚。
  • @RobertMcKee 我刚刚测试了它,它确实做到了。可能是不同版本的.NET?我的目标是 .NET 3.5
  • @Flynn1179 我错了。它有时会发生...msdn.microsoft.com/en-us/library/yd1hzczs(v=vs.71).aspx
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多