正则表达式与空间匹配

时间:2014-07-07 05:40:01

标签: regex

我有一个关于正则表达式匹配的非常简单的问题,我想要“string”(忽略大小写)匹配

在这种情况下:"thisisastring",不应返回任何内容

在这种情况下:"this is a string"应返回“string”上的单个匹配

现在我有@"([S|s][T|t][R|r][I|i][N|n][G|g])"作为正则表达式,但在第一种情况下它无法正常工作。

我该怎么写这个正则表达式?

提前致谢!

1 个答案:

答案 0 :(得分:1)

[S|s]与您的想象不符

请注意,[S|s]并不代表“匹配Ss”。这意味着“匹配一个字符S|s”。这就是[character class]内部的工作方式。要表达OR,您可以使用非捕获组:(?:S|s)。但[Ss]就是你所需要的,而且不区分大小写更好。

<强>不区分大小写

我将假设我们使用不区分大小写的模式,因此我们最终得到一个更简单的正则表达式。我假设您使用的是C#,因为看起来您使用的是逐字字符串:(?i)将起作用。在C#中设置不区分大小写的另一种方法是RegexOptions.IgnoreCase

选项1:边界(关闭但没有雪茄)

(?i)\bstring

这不再与string中的astring匹配。但是,它与string中的##string匹配,您不需要。

选项2:lookbehind

(?i)(?<=[ ])string

lookbehind确保string前面有空格字符。括号是可选的,它们有助于查看空间。

选项3:\K(但不在C#中)

对于支持它的引擎(Perl,PCRE,Ruby 2 +):

(?i)[ ]\Kstring

\K告诉引擎放弃与其返回的最终匹配相匹配的内容