如何使用正则表达式将单词与边界匹配?

时间:2012-08-04 12:23:03

标签: python regex

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

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

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

1 个答案:

答案 0 :(得分:4)

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

这使用正向前瞻和后瞻断言来尊重封闭的角色但不包括在匹配中。

此正则表达式匹配work

  1. 如果它跟在\W字符或下划线之后
    AND
  2. 如果后跟\W字符或下划线。
  3. 由于\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 docsperl regex docs。此外,基于网络的Python Regex Tool非常便于测试。