gpt4 book ai didi

python - 用于匹配重复(未知)子字符串的正则表达式

转载 作者:行者123 更新时间:2023-11-28 21:49:17 24 4
gpt4 key购买 nike

我试图在用户消息中找到“笑话”或类似的词,例如 hahahahihihihueheu。我目前的做法如下:

>>> 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)

[a-z]* 允许在出现拼写错误时有一些回旋余地(例如,ahhahah)。原则上,这工作得相当好。问题是它需要维护,因为 substring_list 需要更新以匹配新形式的“笑话”(例如,添加 xi); “笑话”在不同国家似乎差异很大。

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

最佳答案

这个正则表达式会做到这一点:

\b[a-z]*?([a-z]{2,}?)\1+[a-z]*?\b

用法:

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

Here's a working demo .

要点与您所做的类似,但“核心”不同。正则表达式的核心是这一段:

([a-z]{2,}?)\1+

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

关于python - 用于匹配重复(未知)子字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com