例如,我有这个字符串:"http://www.google.com/this_is_our_network/"
我想匹配“工作”这个词,但开头或结尾没有字母字符。在上面的示例中,正则表达式不应返回匹配项。
但是,在这个字符串中:"http://www.google.com/work_for_us.html"
正则表达式应该匹配,因为开头和结尾都没有字母字符。
试试这个正则表达式:(?<=[\W_])work(?=[\W_])
这使用积极的前瞻和后瞻断言来尊重封闭字符,但不将它们包括在匹配中。
这个正则表达式匹配work
\W
字符或下划线
\W
字符或下划线。\b
不能使用 for word 边界匹配,因为这里不需要_
匹配。\w
更多示例:
匹配多个单词:(?<=[\W_])(work|job)(?=[\W_])
与上面相同,但不创建子匹配:(?<=[\W_])(?:work|job)(?=[\W_])
也尊重线端:(?<=[\W_])(?:work|job)(?=[\W_]|$)
关于正则表达式语法的一些有用说明:
\w
匹配所有字母数字字符和下划线;这相当于[a-zA-Z0-9_]
\W
匹配完全相反的\w
\b
\w
匹配 a和字符之间的边界\W
(或反之亦然)
积极的前瞻断言:foo(?=bar)
匹配foo
后跟bar
,不包括bar
在匹配中。
肯定的后向断言:如果它跟随则(?<=foo)bar
匹配,不包括在匹配中。bar
foo
foo
有关 (python) regex 语法的更多信息,请考虑python regex docs或perl regex docs。此外,基于 Web 的Python正则表达式工具便于测试。