正则表达式匹配重复(未知)子串

Chr*_*ian 2 python regex arrays

我试图找到"笑的话"或类似的,例如hahaha,hihihi,hueheu内用户的邮件.我目前的做法如下:

>>> substring_list = ['ha', 'ah', 'he', 'eh', 'hi', 'ih', 'ho', 'hu', 'hue']
>>> pattern_core = '|'.join(substring_list)
>>> self.regex_pattern = re.compile(r'\b[a-z]*(' + pattern_core + r'){2,}[a-z]*\b', re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)

[a-z]*允许一些余地,当谈到错别字(例如ahhahah).原则上,这种方法运作得相当好.问题是需要维护它需要substring_list更新以匹配新形式的"笑声词"(例如,添加xi); "笑声"似乎在各国之间变得非常明显.

现在我想知道我是否可以在不知道单独模式的情况下以某种方式找到基于重复模式(大小,例如2-4)的单词.例如,hurrhurr包含hurr重复模式.在理想情况下,我可以(a)匹配hurrhurr和(b)识别核心模式hurr.我不知道这是否可以使用正则表达式.

eli*_*ide 5

这个正则表达式会这样做:

\b[a-z]*?([a-z]{2,}?)\1+[a-z]*?\b
Run Code Online (Sandbox Code Playgroud)

用法:

self.regex_pattern = re.compile(r'\b[a-z]*?([a-z]{2,}?)\1+[a-z]*?\b', re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)

这是一个有效的演示.

要点与你正在做的类似,但"核心"是不同的.正则表达式的核心是这件作品:

([a-z]{2,}?)\1+
Run Code Online (Sandbox Code Playgroud)

逻辑是找到一个由2个或更多字母组成的组,然后再\1一次或多次匹配同一组().