如何在C#中忽略正则表达式匹配?

时间:2010-09-09 13:00:04

标签: c# regex

输入字符串:

string datar = "aag, afg, agg, arg";

我正在尝试获得匹配:“aag”和“arg”,但是以下内容不起作用:

string regr = "a[a-z&&[^fg]]g";
string regr = "a[a-z[^fg]]g";

在C#中忽略正则表达式匹配的正确方法是什么?

6 个答案:

答案 0 :(得分:3)

显而易见的方法是使用a[a-eh-z]g,但您也可以尝试negative lookbehind这样:

string regr = "a[a-z](?<!f|g)g"

说明:

  • a匹配字符“a”
  • [a-z]匹配“a”和“z”
  • 之间范围内的单个字符
  • (?<!XXX)断言不可能将下面的正则表达式与在此位置结束的匹配相匹配(负后看)
    • f|g匹配字符“f”或匹配字符“g”
  • g匹配字符“g”

答案 1 :(得分:3)

角色类并不那么花哨。简单的解决方案是:

a[a-eh-z]g

如果你真的想明确列出不属于的字母,你可以试试:

a[^\W\d_A-Zfg]g

此字符类匹配除以下内容之外的所有内容:

  1. \W排除非单词字符,即标点符号,空格和其他特殊字符。剩下的是字母,数字和下划线_
  2. \d删除了数字,所以现在我们有字母和下划线_
  3. _删除了下划线,所以现在我们只匹配字母。
  4. A-Z删除大写字母,所以现在我们只匹配小写字母。
  5. 最后,我们可以列出我们不想匹配的单个小写字母。
  6. 一切都比我们想要的更复杂。这是你的正则表达式!

答案 2 :(得分:3)

您使用的是Java的 set intersection 语法:

a[a-z&&[^fg]]g

..表示两组('a' THROUGH 'z')(ANYTHING EXCEPT 'f' OR 'g')的交集。我所知道的其他正则表达式没有使用这种符号。 .NET flavor使用更简单的 set subtraction 语法:

a[a-z-[fg]]g

...就是设置('a' THROUGH 'z') 减去集合('f', 'g')

Java演示:

String s = "aag, afg, agg, arg, a%g";

Matcher m = Pattern.compile("a[a-z&&[^fg]]g").matcher(s);
while (m.find())
{
  System.out.println(m.group());
}

C#demo:

string s = @"aag, afg, agg, arg, a%g";

foreach (Match m in Regex.Matches(s, @"a[a-z-[fg]]g"))
{
  Console.WriteLine(m.Value);
}

两者的输出是

aag
arg

答案 3 :(得分:2)

如果您想要匹配argaag

,请尝试此操作
a[ar]g

如果您想匹配除afgagg之外的所有内容,则需要此正则表达式:

a[^fg]g

答案 4 :(得分:0)

您似乎正在尝试匹配任意三个字母字符,条件是第二个字符不能是fg。如果是这种情况,为什么不使用以下正则表达式:

string regr = "a[a-eh-z]g";

答案 5 :(得分:0)

正则表达式:a[a-eh-z]g。 然后使用Regex.Matches获取匹配的子字符串。