2

例如,我有这个字符串:"http://www.google.com/this_is_our_network/"

我想匹配“工作”这个词,但开头或结尾没有字母字符。在上面的示例中,正则表达式不应返回匹配项。

但是,在这个字符串中:"http://www.google.com/work_for_us.html"正则表达式应该匹配,因为开头和结尾都没有字母字符。

4

1 回答 1

6

试试这个正则表达式:(?<=[\W_])work(?=[\W_])

这使用积极的前瞻和后瞻断言来尊重封闭字符,但不将它们包括在匹配中。

这个正则表达式匹配work

  1. 如果它跟随一个\W字符或下划线
    AND
  2. 如果它后跟一个\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匹配,不包括在匹配中。barfoofoo

有关 (python) regex 语法的更多信息,请考虑python regex docsperl regex docs。此外,基于 Web 的Python正则表达式工具便于测试。

于 2012-08-04T12:33:39.650 回答