Je suis un débutant en expression régulière, et je n'arrive pas à comprendre comment écrire une seule expression régulière qui "correspondrait" à des mots consécutifs en double tels que:
Paris dans le le printemps.
Non pas que cela soit lié.
Pourquoi ris-tu? Sont mes mes expressions régulières mauvais ??
Existe-t-il une seule expression régulière qui correspond à TOUTES les chaînes en gras ci-dessus?
regex
duplicates
capture-group
Joshua
la source
la source
not that that is related
->not that is related
)? Merci d'avance\1
!\b(\w+)\s+(\1\s*)+\b
?Réponses:
Essayez cette expression régulière:
Voici
\b
une limite de mot et fait\1
référence à la correspondance capturée du premier groupe.la source
\0
aussi? (Où\0
est l'expression régulière entière, jusqu'au point actuel OU où se\0
réfère à l'expressionJe crois que cette regex gère plus de situations:
Une bonne sélection de chaînes de test peut être trouvée ici: http://callumacrae.github.com/regex-tuesday/challenge1.html
la source
<strong>\0</strong>
mais ne fonctionne pas.$1 <strong>$2</strong>
. Mais utilisez également des expressions régulières différentes/\b(\S+) (\1)\b/gi
. Voici un lien: callumacrae.github.io/regex-tuesday/…<p class="bebe">bla bla</p>
comment puis-je intégrer cette formule regex?Essayez ceci avec ci-dessous RE
() * Répéter à nouveau
la source
La bibliothèque PCRE largement utilisée peut gérer de telles situations (vous n'obtiendrez pas la même chose avec les moteurs de regex compatibles POSIX, cependant):
la source
\W+
.\b
ne le fera pas, car il ne consomme aucun caractère.... the these problems...
. Cette solution n'est pas aussi fiable que la structure générale du modèle de Gumbo qui implémente suffisamment les limites des mots.<p class="bebe">bla bla</p>
comment puis-je intégrer cette formule regex?Voici le regex que j'utilise pour supprimer les phrases en double dans mon bot twitch:
(\S+\s*)
recherche toute chaîne de caractères qui n'est pas un espace, suivie d'un espace.\1{2,}
recherche ensuite plus de 2 instances de cette phrase dans la chaîne pour correspondre. S'il y a 3 phrases identiques, cela correspond.la source
\s*
groupe de capture. Voir cette démonstration: regex101.com/r/JtCdd6/1I said "oioioi" that's some wicked mistressship!
,oioioi
etsss
L'expression ci-dessous devrait fonctionner correctement pour trouver n'importe quel nombre de mots consécutifs. La correspondance peut être insensible à la casse.
Exemple d'entrée: au revoir au revoir GooDbYe
Exemple de sortie: au revoir
Explication:
L'expression regex:
\ b: Début d'une limite de mot
\ w +: N'importe quel nombre de caractères de mot
(\ s + \ 1 \ b) *: N'importe quel nombre d'espaces suivi d'un mot qui correspond au mot précédent et termine la limite du mot. Une chose entière enveloppée dans * aide à trouver plus d'une répétition.
Regroupement:
m.group (0): Contiendra le groupe correspondant dans le cas ci-dessus Au revoir au revoir GooDbYe
m.group (1): Contiendra le premier mot du motif correspondant dans le cas ci-dessus Au revoir
La méthode Replace remplacera tous les mots concordants consécutifs par la première instance du mot.
la source
Non. C'est une grammaire irrégulière. Il peut y avoir des expressions régulières spécifiques au moteur / au langage que vous pouvez utiliser, mais aucune expression régulière universelle ne peut le faire.
la source
En voici un qui capture plusieurs mots plusieurs fois:
la source
<p class="bebe">bla bla</p>
comment puis-je intégrer cette formule regex?<p class="bebe">.*?\b\s+(\w+)\b\K\s+\1\s+\b(?=.*?<\/p>)
Regex pour supprimer plus de 2 mots en double (mots consécutifs / non consécutifs)
Essayez cette expression régulière qui peut attraper 2 mots ou plus en double et ne laisser qu'un seul mot. Et les mots en double n'ont même pas besoin d'être consécutifs .
Ici,
\b
est utilisé pour Word Boundary,?=
est utilisé pour une anticipation positive et\1
est utilisé pour le back-référencement.Exemple de source
la source
"the cat sat on the mat"
->" cat sat on the mat"
L'exemple en Javascript: The Good Parts peut être adapté pour cela:
\ b utilise \ w pour les limites des mots, où \ w équivaut à [0-9A-Z_a-z]. Si cela ne vous dérange pas, la réponse acceptée est bonne.
la source
Étant donné que certains développeurs viennent sur cette page à la recherche d'une solution qui élimine non seulement les sous-chaînes consécutives en double sans espace, mais également les triples et au-delà, je vais montrer le modèle adapté.
Pattern:
/(\b\S+)(?:\s+\1\b)+/
( Pattern Demo )Replace:
$1
(remplace la correspondance de chaîne complète par le groupe de capture n ° 1)Ce modèle correspond avec gourmandise à une sous-chaîne "entière" sans espace, puis nécessite une ou plusieurs copies de la sous-chaîne correspondante qui peut être délimitée par un ou plusieurs caractères d'espacement (espace, tabulation, nouvelle ligne, etc.).
Plus précisément:
\b
Les caractères (limite du mot) sont essentiels pour garantir que les mots partiels ne correspondent pas.+
(un ou plusieurs quantificateurs) sur le groupe non capturant est plus approprié que*
parce*
qu'il "dérangera" le moteur d'expression régulière pour capturer et remplacer les occurrences singleton - c'est une conception de modèle inutile.* notez que si vous avez affaire à des phrases ou à des chaînes d'entrée avec ponctuation, le modèle devra être affiné davantage.
la source
Cette expression (inspirée de Mike, ci-dessus) semble attraper tous les doublons, triples, etc., y compris ceux à la fin de la chaîne, ce que la plupart des autres ne font pas:
Je connais la question posée pour faire correspondre uniquement les doublons , mais un triple n'est que 2 doublons l'un à côté de l'autre :)
D'abord, je mets
(^|\s+)
pour m'assurer qu'il commence par un mot complet, sinon «steak d'enfant» irait à «steak d'enfant» (les «s» correspondraient). Ensuite, il correspond à tous les mots complets ((\b\S+\b)
), suivis d'une fin de chaîne ($
) ou d'un certain nombre d'espaces (\s+
), le tout répété plusieurs fois.Je l'ai essayé comme ça et ça a bien fonctionné:
la source
\b
à la fin comme ceci:/(^|\s+)(\S+)(($|\s+)\2)+\b/g, "$1$2")
Cela fonctionnera alors pour des situations comme celle-ci:the the string String string stringing the the along the the string
deviendrathe string stringing the along the string
Avisstring stringing
. Cela correspond à votre réponse. Je vous remercie.Utilisez cette option au cas où vous souhaiteriez une vérification insensible à la casse pour les mots en double.
la source