9
votes

Comment puis-je détecter des mots de rire dans une chaîne?

J'essaie de détecter des mots de rire comme "hahahaha" et "lolololol" dans une chaîne.

J'utilise actuellement la regex suivante: p>

^((.*?)|)(\b[ha]|\b[lo])(.*?)$


6 commentaires

@Jonathan Votre édition a totalement changé la signification de la question .... gamehelp16 devrait faire un changement aussi drastique dans la langue.


@Bill Non, j'ai clarifié le sens existant de la question que vous semblez être seuls dans les malentendus.


@Jonathanhobbs Je faisais juste un verbatim de la question posée. Je suis d'accord Kill considéré comme un mot rire Word est étrange, mais c'est ce que la question indiquait explicitement.


@Bill, quand tout le monde comprend la question d'une manière une manière sauf pour vous, peut-être que le problème n'est pas tout le monde, mais votre compréhension de lecture.


@Bill, je suis sûr que l'OP sera heureux d'indiquer le contraire car il vient d'accepter une solution qui ne fait pas ce que vous avez compris. Lisez la question initiale encore et encore et vous l'obtiendrez ...


Désolé, si ma grammaire n'est pas parfaite, ma langue principale n'est pas l'anglais


5 Réponses :


7
votes

Essayez avec ce motif:

\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b


8 commentaires

Pourquoi tous les groupes non capturants? Regex est assez difficile à lire déjà. Je voudrais les supprimer.


N'oubliez pas de faire correspondre hah, hahah, lool, looooooll, etc.


@Bohemian: Parce que vous n'avez pas besoin de ne rien capturer


@Patashu, eh bien, dans ce cas, nous pourrions également dire n'importe quelle combinaison de ha ou lo lettres ... haaahahahah llooooooolllllllllllll, mais à un moment donné ...


@Bill, relire la question. C'est pourquoi votre réponse a été évitée dans l'oubli.


@plalx et toutes les états de la question --- " qui contient la lettre L, O, H, A "


Cette regex correspond à des mots tels que "arriver" aussi


@ Tituspullo: non, ça ne le fait pas.



6
votes

\ b (A * ha + h [ha] * | O? L + O + L + [OL] *) \ B code>

Correspondances: P>

looo
oool
oooo
llll
ha
l
o
lo
ol
ah
aah
aha
kill
lala
haunt
hauha
louol


0 commentaires

6
votes

Pour le garder simple, car les solutions publiées peuvent être trop compliquées pour ce que vous voulez faire: Si la seule chose que vous comptez comme "Mots riants", sont ha code>, haha ​​ Code>, etc. et lol code>, lolol code>, lololol code>, etc., puis l'expression régulière suivante sera suffisante:

\b(ha)+|l(ol)+\b


2 commentaires

+1 C'est la solution la plus efficace. Garder les choses simples. Cela ressemble à cela dans le contexte d'un jeu, et vos joueurs comprendront comment déclencher la réaction de rire du jeu s'ils le souhaitent. Cela ne doit pas nécessairement être une détection d'humour sans défaut.


Souvent, quelqu'un va taper lololololololololololololololololololololololoplasque et ce n'est pas une répétition parfaite, cependant.



1
votes

Vous pouvez essayer xxx

vous pouvez essayer de pouvoir dans ceci: xxx


0 commentaires

0
votes

Dans Python, j'ai essayé de le faire de cette manière:

import re

re.sub(r"\b(?:a{0,2}h{1,2}a{0,2}){2,}h?\b", "<laugh>", "hahahahha! I love laughing")


0 commentaires