例如,我有这个字符串:"http://www.google.com/this_is_our_network/"
我希望匹配“work”这个词,但在开头或结尾没有字母字符。在上面的示例中,正则表达式不应返回匹配项。
但是,在这个字符串中:"http://www.google.com/work_for_us.html"
正则表达式应该匹配,因为在开头和结尾都没有字母字符。
答案 0 :(得分:4)
试试这个正则表达式:(?<=[\W_])work(?=[\W_])
这使用正向前瞻和后瞻断言来尊重封闭的角色但不包括在匹配中。
此正则表达式匹配work
\W
字符或下划线之后
\W
字符或下划线。\b
匹配此处不需要的_
,因此无法使用 \w
字词边界匹配。
进一步的例子:
匹配多个字词:
(?<=[\W_])(work|job)(?=[\W_])
与上述相同但未创建子匹配:
(?<=[\W_])(?:work|job)(?=[\W_])
同样尊重行尾:
(?<=[\W_])(?:work|job)(?=[\W_]|$)
有关正则表达式语法的一些有用说明:
\w
匹配所有字母数字字符和下划线;这相当于[a-zA-Z0-9_]
\W
与\w
\b
匹配\w
和\W
字符之间的边界(或反之亦然)
积极的预见断言:
foo(?=bar)
匹配foo
后跟bar
,不包括bar
比赛。
积极的后卫断言:
(?<=foo)bar
匹配bar
如果它跟在foo
之后,不包括foo
在比赛中。
有关(python)正则表达式语法的更多信息,请考虑python regex docs或perl regex docs。此外,基于网络的Python Regex Tool非常便于测试。