我有一个“主要”字样“ LAUNCHER”,还有两个其他字样“ LAUNCH”和“ LAUNCHER”。我想找出(使用正则表达式),哪些词在“主”词中。我使用带有正则表达式的findAll:“(LAUNCH)|(LAUNCHER)”,但这只会返回LAUNCH而不是两者。我该如何解决?
import re
mainword = "launcher"
words = "(launch|launcher)"
matches = re.findall(words,mainword)
for match in matches:
print(match)
答案 0 :(得分:0)
您可以尝试以下操作:
import re
mainword = "launcher"
words = "(launch|launcher)"
for x in (re.findall(r"[A-Za-z@#]+|\S", words)):
if x in mainword:
print (x)
结果:
启动
发射器
答案 1 :(得分:0)
如果您不需要使用正则表达式,则可以使用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)
请注意,即使使用此循环,如果使用|,也需要让较长的单词出现在较短的单词之前。正则表达式中的运算符。这是因为永远不会贪婪,并且会匹配第一个单词,而不是最长的单词。