我有一些文字
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
我有一个正则表达式,它是根据用户输入生成的。
@".*ip.*"
这与整个行匹配,正如您所期望的那样,所以我用字边界包装这个表达式。
@"\b.*ip.*\b"
因为处理器是贪婪的,所以它仍然匹配整个文本。所以,我试过让重复变得懒惰。
@"\b.*?ip.*?\b"
这是更好但匹配
Lorem ipsum
dolor sit amet, consectetuer adipiscing
如何扩展原始@".*ip.*"
模式,使其懒惰地匹配整个单词和捕获?
ipsum
adipiscing
此regex tester可能对回答问题很有用
答案 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-]*