如何用Python正则捕获由一致符号分隔字母组成的单词?
解决方法
要捕获分隔符完全一致的这类单词,核心是先捕获第一个分隔符,强制后续所有分隔符和它相同。可以通过正则的捕获组反向引用来实现:
正则逻辑拆解
\b:匹配单词边界,确保我们匹配的是独立的单词片段\w:匹配第一个字母(\W):捕获第一个分隔符(非单词字符,涵盖空格、点、emoji等)到组1(?:\w\1)+:非捕获组,重复匹配「字母+组1的分隔符」至少一次,保证后续分隔符和第一个完全一致\w:匹配最后一个字母\b:再次匹配单词边界,避免多余字符
代码实现
import re x = "This is s u p e r and s.u.p.e.r and s👌u👌p👌e👌r and s!u.p!e.r" # 正则模式:用捕获组记住第一个分隔符,后续强制匹配相同分隔符 pattern = r'\b(\w(\W)(?:\w\2)+\w)\b' matches = re.findall(pattern, x) # 提取完整匹配的结果(忽略捕获的分隔符) result = [match[0] for match in matches] print(result) # 输出:['s u p e r', 's.u.p.e.r', 's👌u👌p👌e👌r']
为什么能排除不符合的项
对于s!u.p!e.r,第一个分隔符是!(被捕获到组2),但第二个分隔符是.,和组2的内容不匹配,因此整个片段不会被正则匹配到,自然被排除。
内容的提问来源于stack exchange,提问作者Billy Bonaros
相关产品推荐
相关产品推荐

