我正在使用一个名为findlist
的函数来返回文本中某个字符串的所有位置的列表,并使用正则表达式来查找单词边界。但是我想忽略字符(
,而仅考虑其他词的边界,以便它将在split
中找到var split
,但不能在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)
答案 0 :(得分:2)
您可以检查尾随单词边界后是否有lookahead (
为负的(?!\()
:
instances = findlist(r"\b{}\b(?!\()".format('split'), s)
^^^^^^
找到整个单词后,(?!\()
将触发,如果在找到的单词的右边立即有一个(
,则匹配将失败。
请参见Python demo:
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)]