Quando provo a utilizzare l'espressione regolare per trovare le stringhe in altre stringhe, non funziona come previsto. Ecco un esempio:Cerca stringhe usando un'espressione regolare in Python
import re
message = 'I really like beer, but my favourite beer is German beer.'
keywords = ['beer', 'german beer', 'german']
regex = re.compile("|".join(keywords))
regex.findall(message.lower())
Risultato:
['beer', 'beer', 'german beer']
Ma il risultato atteso sarebbe:
['beer', 'beer', 'german beer', 'german']
Un altro modo per farlo potrebbe essere:
results = []
for k in keywords:
regex = re.compile(k)
for r in regex.findall(message.lower()):
results.append(r)
['beer', 'beer', 'beer', 'german beer', 'german']
Funziona come voglio, ma penso che sia n o il modo migliore per farlo. Qualcuno può aiutarmi?
L'interrogante non vuole solo per verificare se una particolare stringa è parte di una stringa, ma vuole che tutte le occorrenze di una particolare stringa. In questo caso, l'uso di 're.findall()' è il modo migliore per farlo. Evitare le espressioni regolari renderebbe questa soluzione più laboriosa del necessario. – pemistahl
Grazie ragazzi per le vostre risposte. Ora so che sto usando una funzione sbagliata (findall), quindi cosa consiglia per trovare le corrispondenze, incluse le sovrapposizioni? –
@ Adrián: Hai bisogno del potere delle espressioni regolari o vuoi solo trovare stringhe fisse? –