python - 在 Python 中具有自定义单词边界的正则表达式
问题描述
我正在使用一个函数findlist
来返回文本中某个字符串的所有位置的列表,并使用正则表达式来查找单词边界。但我想忽略这个字符(
,只考虑其他单词的边界,这样它就会找到split
invar split
而不是 in split(a)
。有没有办法做到这一点?
import re
def findlist(input, place):
return [m.span() for m in re.finditer(input, place)]
str = '''
var a = 'a b c'
var split = a.split(' ')
'''
instances = findlist(r"\b%s\b" % ('split'), str)
print(instances)
解决方案
您可以检查是否有一个(
带有负前瞻 (?!\()
的尾随词边界之后:
instances = findlist(r"\b{}\b(?!\()".format('split'), s)
^^^^^^
将(?!\()
在找到整个单词后触发,如果(
找到的单词的右侧有a,则匹配失败。
请参阅Python 演示:
import re
def findlist(input_data, place):
return [m.span() for m in re.finditer(input_data, place)]
s = '''
var a = 'a b c'
var split = a.split(' ')
'''
instances = findlist(r"\b{}\b(?!\()".format('split'), s)
print(instances) # => [(21, 26)]