Поиск всех вхождений + подстрок слова - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть «главное» слово «LAUNCHER» и еще 2 слова «LAUNCH» и «LAUNCHER».Я хочу выяснить (используя регулярные выражения), какие слова входят в «основное» слово.Я использую findAll с регулярным выражением: "(LAUNCH) | (LAUNCHER)", но это вернет только LAUNCH, а не их обоих.Как мне это исправить?

import re
mainword = "launcher"
words = "(launch|launcher)"
matches = re.findall(words,mainword)
for match in matches:
  print(match)

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Если вам не нужно использовать регулярные выражения, это будет сделано более эффективно с помощью оператора IN и простого понимания цикла или списка:

mainWord = "launcher"
words    = ["launch","launcher"]
matches  = [ word for word in words if word in mainWord ] 

# case insensitive...
matchWord = mainWord.lower()
matches   = [ word for word in words if word.lower() in matchWord ]

Даже если вам требуется регулярное выражение, циклбыло бы необходимо, потому что re.findAll () никогда не соответствует перекрывающимся шаблонам:

import re
pattern   = re.compile("launcher|launch")
mainWord  = "launcher"
matches   = []
startPos  = 0
lastMatch = None
while startPos < len(mainWord):
    if lastMatch : match = pattern.match(mainWord,lastMatch.start(),lastMatch.end()-1) 
    else         : match = pattern.match(mainWord,startPos)
    if not match: 
        if not lastMatch : break
        startPos  = lastMatch.start() + 1
        lastMatch = None
        continue
    matches.append(mainWord[match.start():match.end()])
    lastMatch = match

print(matches)

обратите внимание, что даже в этом цикле вам нужно, чтобы более длинные слова появлялись перед более короткими, если вы используете |оператор в регулярном выражении.Это потому что |никогда не будет жадным и будет соответствовать первому, а не самому длинному слову.

0 голосов
/ 22 февраля 2019

вы можете попробовать что-то вроде этого:

import re
mainword = "launcher"
words = "(launch|launcher)"
for x in (re.findall(r"[A-Za-z@#]+|\S", words)):
    if x in mainword:
        print (x)

результат:

запуск

пусковая установка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...