查看单词边界匹配什么:
单词边界可以出现在以下三个位置之一:
- 如果字符串中的第一个字符是单词字符,则在字符串中第一个字符之前。
- 如果字符串中的最后一个字符是单词字符,则在字符串的最后一个字符之后。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
在您的模式中,
}b只有在单词char
}(字母,数字或
_)之后才匹配。
使用时,
(W|$)您需要 显式 使用非单词或字符串结尾。
在这些情况下,我总是建议基于否定环顾的字词边界:
re.search(r'(?<!w){}(?!w)'.format(re.escape('Sortesindex[persons]{Sortes}')), 'test Sortesindex[persons]{Sortes} test')在此,
(?<!w)如果当前位置的左侧紧邻有一个字符char
,则负向后搜索将使匹配失败;如果当前位置的右侧紧邻有一个字符char,则
(?!w)负向搜索将使匹配失败。
实际上,可以很容易地进一步自定义这些环视模式(例如,只有在模式周围有 字母
时才使匹配失败,请使用
[^Wd_]代替
w,或者如果只允许空格周围的匹配,请使用
(?<!S)/
(?!S)环视边界)。



