Regex.Matches匹配大小写

3
foreach (Match match in Regex.Matches(line, "X"))
{
      indexes.Add(match.Index);
}

我有一个快速的问题。这是我的代码部分,我正在获取X的索引,但我也想获取即使X是小写字母时的索引。我应该写什么?


2
你应该写"[Xx]"。这在任何正则表达式教程中都有涉及,阅读其中之一是在向SO提问之前使用正则表达式的合理步骤。 - Jon
如果你只需要查找单个字符,那么使用正则表达式是一个过于复杂的解决方案。 - Sean
2个回答

5
使用i模式修饰符(使正则表达式不区分大小写):
foreach (Match match in Regex.Matches(line, "(?i)X"))

或者使用 RegexOptions.IgnoreCase 选项:

foreach (Match match in Regex.Matches(line, "X", RegexOptions.IgnoreCase))

或同时指定 Xx

foreach (Match match in Regex.Matches(line, "[Xx]"))

3
不使用正则表达式,您可以使用 Regex.Matches(line.ToLower(), 'x')

虽然这是一个解决方案,但由于使用了 ToLower,导致正则表达式匹配现在成为 O(2n) 操作,因此效率相当低下。 - Mike Perrenoud
正则表达式匹配不是 O(n) 吗?(诚实地说,我不知道)顺便说一下,我这里并没有考虑性能方面的问题 :) - Dan
一个正则表达式并非根据定义是一个O(n)操作,而是在很大程度上取决于表达式本身。 - Mike Perrenoud
我在文本中说错了话,但是我的思路是沿着另一条线的,这是一个具有 ToLowerO(2n) 操作。 - Mike Perrenoud
我本以为时间复杂度应该是O(n),因为你需要遍历字符串来查找模式。不过还是感谢你的澄清。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接