如何用Python提取字符串中指定长度的连续重复字符序列?
提取字符串中指定长度的连续相同字符序列
这个需求用Python的正则表达式就能完美解决,思路很直接——我们需要精准匹配连续恰好N个相同字符的片段,同时避免从更长的连续序列中误截取。
实现代码
import re # 你的输入字符串 x = "jhg**11111**jjhgj**11111**klhhkjh111ljhjkh1111" # 指定要提取的连续序列长度 target_length = 5 # 构造正则表达式:匹配恰好target_length个相同字符的连续片段 pattern = rf'(?<!\1)(.)\1{{{target_length - 1}}}(?!\1)' # 捕获所有符合条件的字符 matched_chars = re.findall(pattern, x) # 将单个字符扩展为目标长度的序列 result = [char * target_length for char in matched_chars] # 输出结果 print(' '.join(result))
代码解释
(.):捕获任意单个字符(数字、符号、字母都适用)\1{{{target_length - 1}}}:通过反向引用\1调用刚才捕获的字符,让它重复target_length-1次,加上之前的1次,刚好是我们要的长度(?<!\1):负向零宽断言,确保当前匹配片段的前一个字符不是我们捕获的字符,避免从更长的连续序列(比如6个1)的开头截取(?!\1):同样是负向零宽断言,确保片段的后一个字符也不是捕获的字符,避免从更长序列的结尾截取- 最后通过
char * target_length把单个捕获的字符还原成完整的连续序列
运行这段代码,你会得到预期输出:11111 11111
如果你的需求是提取至少N个相同字符的连续序列(比如从6个1中也能提取出11111),只需要去掉前后的断言,改成rf'(.)\1{{{target_length - 1}}}',不过这种情况下可能会得到重复的匹配结果,需要额外去重处理哦。
内容的提问来源于stack exchange,提问作者ALBADI
相关产品推荐
相关产品推荐

