Regex с настроенными границами слов в Python - PullRequest
0 голосов
/ 05 февраля 2019

Я использую функцию с именем 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 голосов
/ 05 февраля 2019

Вы можете проверить, есть ли ( после завершающей границы слова с отрицательным lookahead (?!\():

instances = findlist(r"\b{}\b(?!\()".format('split'), s)
                             ^^^^^^ 

(?!\() сработает после целогослово найдено, и если справа от найденного слова есть (, совпадение будет неудачным.

См. демонстрационную версию 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...