使用Python自定义单词边界的正则表达式

时间:2019-02-05 10:21:23

标签: python regex

我正在使用一个名为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)

1 个答案:

答案 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)]