0

我有一些文字

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

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

@".*ip.*"

正如您所期望的那样,这与整行匹配,因此我用单词边界包装了这个表达式。

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

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

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

这更好,但匹配

  1. Lorem ipsum
  2. dolor sit amet, consectetuer adipiscing

如何扩展原始@".*ip.*"模式,使其懒惰地匹配整个单词并捕获?

  1. ipsum
  2. adipiscing

这个正则表达式测试器可能对回答问题很有用

4

3 回答 3

5

为什么不直接使用\w*而不是.*?

@"\w*ip\w*"

这也将匹配_0-9因为它包含在\w. 如果你想排除它,你可以[a-zA-Z]*显式地使用而不是\w那里。

于 2013-02-19T13:52:04.063 回答
1

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

@"\b\S*?ip\S*?\b"
于 2013-02-19T13:52:56.997 回答
1

我认为有些单词可以包含连字符,所以最好使用模式[\w-]*ip[\w-]*

于 2013-02-19T14:01:38.637 回答