expression régulière à l'exclusion de mot dans la R
Je ne sais pas vraiment comment bien trouver des mots à l'aide de non-correspondance d'expression régulière dans la R
Par exemple: les données incluent:
x = c("hail", "small hail", "wind hail", "deep hail", "thunderstorm hail", "tstm wind hail", "gusty wind hail", "late season hail", "non severe hail", "marine hail")
Je veux trouver tous les obs avoir "grêle", mais n'avoir "marine"
Ma tentative:
x[grep("[^(marine)] hail", x)]
-> je n'ai que 5:
"small hail" "wind hail" "deep hail" "tstm wind hail" "gusty wind hail"
Je ne sais pas ce qui se passe avec les 4 autres
x[grepl("hail", x) & !grepl("marine", x)]
pourrait être plus intuitiveVous êtes le meilleur, Richard. Très intuitif
OriginalL'auteur Duy Bui | 2015-01-16
Vous devez vous connecter pour publier un commentaire.
Utilisation lookaround affirmations.
OU
Ajouter
\b
limites si nécessaire.\b
correspondances entre un mot de caractères et un caractère non alphabétique.^
Affirme que nous sommes au début.(?=.*hail)
Anticipation positif qui affirme que le match doit contenir la chaînehail
(?!.*marine)
Anticipation négatif, qui affirme que le match ne contiennent pas la chaînemarine
.De sorte que la regex corresponde à l'ancrage de départ ou au début de la ligne seulement si les deux conditions sont remplies.
OriginalL'auteur Avinash Raj
Vous souhaitez utiliser une anticipation de l'assertion dans cette circonstance. L'implémentation actuelle de votre nié le caractère de classe de ne pas faire ce que vous attendez, au contraire, il correspond à ce qui suit:
Pour résoudre ce problème, vous pouvez simplement faire:
OriginalL'auteur hwnd
Si tous
x
inclut uniquement les types dehail
, puis:Devrait fonctionner parfaitement.
Edit: Par G. Grothendieck suggestion:
est une meilleure solution.
x[ ! grepl("marine", x) ]
à la place.Puisqu'il n'y a
"marine"
dans les données de l'exemple que j'ai pris pour acquis qu'il serait là, mais, vous avez raison. Ma réponse est édité. Je vous remercie.OriginalL'auteur Andrew Taylor
Ce que votre tentative,
x[grep("[^(marine)] hail", x)]
, n'est-il cherchehail
précédée par n'importe quel caractère sauf m,a,r,i,n,e . Pour ceux qui sont exclus, la dernière lettre du mot précédenthail
est l'un de ces six.OriginalL'auteur user1207177