例如,我有这个字符串: "http://www.google.com/this_is_our_network/"
我想匹配“工作”这个词,但在开头或结尾都没有字母字符。在上面的示例中,正则表达式不应返回匹配项。
但是,在这个字符串中:"http://www.google.com/work_for_us.html"正则表达式应该匹配,因为开头和结尾都没有字母字符。
试试这个正则表达式: (?<=[\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匹配 a\w和一个\W字符之间的边界(或反之亦然)
正前瞻断言:foo(?=bar)匹配foo后跟bar,不包含bar在匹配中。
正后视断言:(?<=foo)bar匹配,bar如果它跟在foo,不包括foo在匹配中。
有关 (python) regex 语法的更多信息,请考虑python regex docs或perl regex docs。此外,基于 Web 的Python Regex 工具可方便地进行测试。