正则表达式捕获未在模式中指定的字符

时间:2014-04-25 13:16:53

标签: regex c#-4.0

我有一个字符串"this [is] not req!red"

我正在尝试创建一个正则表达式,它将选择"字符"未在列表中指定

[-a-zA-Z.,-()=\s\+:?!*\;><0-9]

如何实现这一目标?

语言是C#

2 个答案:

答案 0 :(得分:2)

您的正则表达式是positive character class,与其中指定的每个 legal 字符相匹配:

[-a-zA-Z.,\-()=\s+:?!*\;><0-9]

Regular expression visualization

Debuggex Demo

您不想要的角色不匹配。要切换此选项,仅匹配您想要的字符,请将^添加为negative character class作为其第一个字符:

[^-a-zA-Z.,\-()=\s+:?!*\;><0-9]

Regular expression visualization

Debuggex Demo

要捕获匹配项,请将整个正则表达式放入capturing group

([-a-zA-Z.,\-()=\s+:?!*\;><0-9])

([^-a-zA-Z.,\-()=\s+:?!*\;><0-9])

然后用您选择的语言迭代匹配。每个角色都在捕获组1中。

我不确定你的目标。更多信息将帮助我们为您提供更好的答案。


请考虑将Stack Overflow Regular Expressions FAQ加入书签以供将来参考。

答案 1 :(得分:1)

我认为你需要这个:

[^-a-zA-Z.,\-()=\s\+:?!*\;><0-9]

^将否定列表中的每个字符。

演示:http://regex101.com/r/vX0oQ7

所以基本上在你的例子中,除了方括号之外,它不会选择任何东西。

this [is] not req!red
     |  |