我试图在字符串中检测像“hahahaha”和“lolololol”这样的笑词。
目前我正在使用以下正则表达式:
^((.*?)|)(\b[ha]|\b[lo])(.*?)$
但是,这对我的目的不起作用。它有效,但它也匹配与笑声完全无关的单词,例如“kill”,因为它只查找包含字母 l、o、h、a 的任何单词。
如何检测字符串中的笑词(如“hahaha”或“lololol”)?
我试图在字符串中检测像“hahahaha”和“lolololol”这样的笑词。
目前我正在使用以下正则表达式:
^((.*?)|)(\b[ha]|\b[lo])(.*?)$
但是,这对我的目的不起作用。它有效,但它也匹配与笑声完全无关的单词,例如“kill”,因为它只查找包含字母 l、o、h、a 的任何单词。
如何检测字符串中的笑词(如“hahaha”或“lololol”)?
试试这个模式:
\b(?:a*(?:ha)+h?|(?:l+o+)+l+)\b
如果您的正则表达式支持原子组和所有格量词,则更好:
\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b
\b(a*ha+h[ha]*|o?l+o+l+[ol]*)\b
火柴:
hahahah
haha
lol
loll
loool
looooool
lolololol
lolololololo
ahaha
aaaahahahahahaha
不匹配:
looo
oool
oooo
llll
ha
l
o
lo
ol
ah
aah
aha
kill
lala
haunt
hauha
louol
为简单起见,因为发布的解决方案对于您想要做的事情可能过于复杂:如果您认为“笑声”的唯一内容是ha
,haha
等和lol
, lolol
,lololol
等,那么以下正则表达式将是充足的:
\b(ha)+|l(ol)+\b
这假设一个正则表达式方言,其中\b
表示您似乎正在使用的单词边界。
在 Python 中,我尝试这样做:
import re
re.sub(r"\b(?:a{0,2}h{1,2}a{0,2}){2,}h?\b", "<laugh>", "hahahahha! I love laughing")
>> <laugh>! I love laughing
你可以试试
regex_pattern = "\b(?:a*(?:ha)+h?|h*ha+h[ha]*|(?:l+o+)+l+|o?l+o+l+[ol]*)\b"
你可以试试这个:
sentance = hhhaaahhhaaa