trouver une correspondance exacte pour la chaîne
J'ai utilisé la fonction suivante pour trouver la correspondance exacte des mots dans une chaîne de caractères.
def exact_Match(str1, word):
result = re.findall('\\b'+word+'\\b', str1, flags=re.IGNORECASE)
if len(result)>0:
return True
else:
return False
exact_Match(str1, word)
Mais j'obtiens une correspondance exacte pour les deux mots "prix" et "primé" lorsqu'elle ne devrait être primé pour la chaîne suivante.
str1 = "award-winning blueberries"
word1 = "award"
word2 = "award-winning"
Comment puis-je obtenir tel que re.findall va correspondre à des mots, avec des traits d'union et d'autres signes de ponctuation?
OriginalL'auteur lost9123193 | 2013-05-27
Vous devez vous connecter pour publier un commentaire.
Faire votre propre limite de mot:
copier-coller à partir d'ici, à mon interprète:
En fait, le casting de
bool
est inutile et ne l'aide pas du tout. La fonction est mieux sans:remarque:
exact_Match
est assez peu conventionnelle boîtier. il vous suffit d'appeler exact_match.vous n'avez probablement pas copier le code, ou fait quelques changements. Il fonctionne pour moi, et je l'ai copié à partir d'ici.
OriginalL'auteur Elazar
Le problème avec votre initiale de la méthode, c'est que
'\\b'
ne désigne pas la largeur nulle affirmation de recherche que vous cherchez. (Et s'il le fait, je voudrais utiliserr'\b'
au lieu parce que les barres obliques inverses peuvent devenir une vraie galère dans les expressions régulières - voir ce lien)De Expression régulière HOWTO
\b
Word boundary. This is a zero-width assertion that matches only at the beginning or end of a word. A word is defined as a sequence of alphanumeric characters, so the end of a word is indicated by whitespace or a non-alphanumeric character.
Parce que
-
est un caractère non-alphanumérique, votre findall expression régulière trouverezaward
dansaward-wining
mais pas dansawards
.Selon votre recherché phrase, je pense aussi à l'aide de
re.findall
au lieu dere.match
comme suggéré par Elazar. Dans votre exemplere.match
fonctionne, mais si le mot que vous cherchez est imbriquée n'importe où au-delà du début de la chaîne,re.match
ne réussira pas.OriginalL'auteur Gronk