将正则表达式限制为单词边界

时间:2013-02-19 13:46:26

标签: c# .net regex

我有一些文字

"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."

我有一个正则表达式,它是根据用户输入生成的。

@".*ip.*"

这与整个行匹配,正如您所期望的那样,所以我用字边界包装这个表达式。

@"\b.*ip.*\b"

因为处理器是贪婪的,所以它仍然匹配整个文本。所以,我试过让重复变得懒惰。

@"\b.*?ip.*?\b"

这是更好但匹配

  1. Lorem ipsum
  2. dolor sit amet, consectetuer adipiscing
  3. 如何扩展原始@".*ip.*"模式,使其懒惰地匹配整个单词和捕获?

    1. ipsum
    2. adipiscing

    3. regex tester可能对回答问题很有用

3 个答案:

答案 0 :(得分:5)

为什么不使用\w*代替.*?

@"\w*ip\w*"

这也会匹配_0-9,因为它包含在\w中。如果您要将其排除,可以明确使用[a-zA-Z]*,而不是\w

答案 1 :(得分:1)

您已经接近解决方案了。只需用非空白转义序列\ S替换点(任何字符)\ S:

@"\b\S*?ip\S*?\b"

答案 2 :(得分:1)

我认为某些单词可以包含连字符,因此使用模式[\w-]*ip[\w-]*

会更好