我将代码简化为我遇到的具体问题.
import re
pattern = re.compile(r'\bword\b')
result = pattern.sub(lambda x: "match", "-word- word")
Run Code Online (Sandbox Code Playgroud)
我正进入(状态
'-match- match'
Run Code Online (Sandbox Code Playgroud)
但我想要
'-word- match'
Run Code Online (Sandbox Code Playgroud)
编辑:
或者是字符串 "word -word-"
我想要
"match -word-"
Run Code Online (Sandbox Code Playgroud)
你需要的是消极的看法.
pattern = re.compile(r'(?<!-)\bword\b')
result = pattern.sub(lambda x: "match", "-word- word")
Run Code Online (Sandbox Code Playgroud)
引用文档:
(?<!...)匹配如果字符串中的当前位置没有匹配....
因此,如果单词\b分隔符号前面没有减号,则只会匹配-.
如果您需要在字符串的末尾使用它,则必须使用负向前瞻,如下所示:(?!-).然后,完整的正则表达式将导致:(?<!-)\bword(?!-)\b
\b基本上表示字符上的单词边界,除此之外[a-zA-Z0-9_]还包括空格。用负环视包围word以确保其前后没有非空格字符:
re.compile(r'(?<!\S)word(?!\S)')
Run Code Online (Sandbox Code Playgroud)