您可以使用环顾四周:
(?:b|(?<=_))word(?=b|_)^^^^^^^^^^^^^ ^^^^^^^
请参阅regex演示,其中
(?:b|(?<=_))是一个非捕获组,它匹配单词边界或前缀为的位置
_,并且
(?=b|_)是一个正向超前匹配字词边界或
_符号的匹配项。
不幸的是,Python
re不允许使用,
(?<=b|_)因为后向模式的宽度应固定(否则,您将得到
look-behind requiresfixed-width pattern错误)。
一个Python的演示:
import rerx = r"(?:b|(?<=_))word(?=b|_)"s = "some_word_here and a word there"print(re.findall(rx,s))
另一种解决方案是使用自定义单词边界,例如
(?<![^W_])/
(?![^W_])(请参阅在线演示):
rx = r"(?<![^W_])word(?![^W_])"
(?<![^W_])如果没有非单词和
_char以外的字符,否定的lookbehind匹配失败(因此,它要求字符串的开头或任何单词char不包括搜索词
_
之前 的字符),
(?![^W_])如果没有其他char
,否定的lookahead将失败而不是非单词和
_字符(也就是说,要求字符串的末尾或不包括在内的单词字符
_)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)