首页 > 解决方案 > 在 Python 中具有自定义单词边界的正则表达式

问题描述

我正在使用一个函数findlist来返回文本中某个字符串的所有位置的列表,并使用正则表达式来查找单词边界。但我想忽略这个字符(,只考虑其他单词的边界,这样它就会找到splitinvar 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)

标签: pythonregex

解决方案


您可以检查是否有一个(带有负前瞻 (?!\()的尾随词边界之后:

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

推荐阅读