Expression régulière pour rechercher des mots avec des traits d'union et/ou des apostrophes
Je cherchais une expression régulière pour rechercher des mots avec des traits d'union et/ou des apostrophes. Jusqu'à présent, j'ai:
(\w+([-'])(\w+)?[']?(\w+))
et qui fonctionne, la plupart du temps, mais si il y a une apostrophe, puis un trait d'union, comme "qu'est-ce", il ne correspond pas aux. Je pourrais ajouter plus d'options, bien que peut-être il y a un autre moyen plus efficace?
Quelques exemples de ce que je suis en train de match: Marie, Haute-école, c'est, des Chambres, Qu'est-ce.
De le regarder à nouveau, (\w+([-'])(\w+)?[-']?(\w+)) va travailler pour ce dont j'ai besoin la plupart du temps si je suis encore curieux de savoir si il y a une autre manière.
Merci de donner plus d'exemples et contre-exemples. Lequel des énoncés suivants sont censés correspondre à:
Il n'est pas nécessaire pour les maths, mais à peu près n'importe quel mot qui pourraient se produire dans n'importe quelle langue Européenne. Je peux ajouter des caractères que nécessaire.
Merci de donner plus d'exemples et contre-exemples. Lequel des énoncés suivants sont censés correspondre à:
"-a"
, "'a"
, "a'-b"
, "a-"
?Il n'est pas nécessaire pour les maths, mais à peu près n'importe quel mot qui pourraient se produire dans n'importe quelle langue Européenne. Je peux ajouter des caractères que nécessaire.
OriginalL'auteur empedocle | 2015-08-10
Vous devez vous connecter pour publier un commentaire.
l'utilisation de ce modèle
Démo
une explication ajouté
Merci. J'ai aussi trouvé l'explication de prospection en Introduisant les Expressions Régulières utile.
OriginalL'auteur alpha bravo
debuggex.com est une grande ressource pour la visualisation de ces sortes de choses
\b\w*[-']\w*\b
devrait faire l'affaireOriginalL'auteur Patrick
[\w'-]+
correspondent assez bien à toutes les occurrences de mots, avec ou sans traits d'union et apostrophes, mais aussi dans les cas où ces personnages sont adjacentes.(?:\w|['-]\w)+
doit correspondre à des cas où les personnages ne peuvent pas être adjacentes.Si vous avez besoin d'être sûr que le mot contient des traits d'union et/ou des apostrophes, et que ces caractères ne sont pas adjacents peut-être essayer
\w*(?:['-](?!['-])\w*)+
. Mais ce serait aussi le match, et à lui seul.OriginalL'auteur OrderNChaos
Le problème que vous rencontrez, c'est que vous avez réellement l'un des trois sous-modèles: un ou plusieurs caractères, une apostrophe suivie par un ou plusieurs caractères, et un trait d'union suivi par un ou plusieurs caractères.
Cela suppose que vous ne souhaitez pas accepter les mots qui commencent ou se terminent par des apostrophes ou des traits d'union ou ont des traits d'union à côté des apostrophes (ou vice versa).
Je crois que la meilleure façon de la représenter dans une RegExp serait:
/\b[a-z]+(?:['-]?[a-z]+)*\b/
qui est décrit comme:
qui va correspondre à un mot qui commence et se termine avec un alpha et peut contenir zéro, un ou plusieurs groupes de soit une apos ou d'un tiret suivi d'une ou plusieurs alpha.
OriginalL'auteur Rob Raisch
Comment sur:
\'?\w+([-']\w+)*\'?
démo
Je suppose que ces mots ne devraient pas être en correspondance:
something-
ou-something
: début ou à la fin avec-
some--thing
ousome'-thing
:-
pas suivie par un caractèresome''
: deux traits d'unionOriginalL'auteur iplus26