Python正则实现:删除含≥5个大写字母子串及?到:的字符串片段
问题背景
现有存储字符串元素的Python列表,需要通过正则实现两类字符串处理规则:
- 规则1:移除所有包含至少5个大写英文字母的连续路径段(段间以
//?/:为分隔边界) - 规则2:移除字符串中从
?字符开始、到:字符前的所有内容
给定输入输出示例:
输入列表:
['helLo/aPPle/BuTTeRfLY:Missed','bliss/ScIENCEs/brew?Dyna=skjdk:Nest','Self/NESTeDsd/hello/MiSSInG:Good']输出列表:
['helLo/aPPle/:Missed','bliss//brew:Nest','Self//hello/:Good']
正则表达式设计
两个处理规则对应两个正则模式,按顺序替换即可:
- 匹配含至少5个大写字母的路径段:
r'[^/?:]*(?:[A-Z][^/?:]*){5,}'- 逻辑说明:
[^/?:]*匹配非分隔符(//?/:)的任意字符,(?:[A-Z][^/?:]*){5,}匹配至少5次「单个大写字母+后续非分隔符字符」组合,精准定位大写数量≥5的整段内容,替换为空字符串即可完成移除。
- 逻辑说明:
- 匹配
?到:前的所有内容:r'\?[^:]*'- 逻辑说明:匹配以
?开头、后续连续任意个非:字符的内容,替换为空字符串即可完成该段移除,保留结尾的:字符。
- 逻辑说明:匹配以
Python实现代码
import re # 预编译正则模式提升执行效率 pattern_upper = re.compile(r'[^/?:]*(?:[A-Z][^/?:]*){5,}') pattern_question = re.compile(r'\?[^:]*') def process_string_list(input_list): result = [] for s in input_list: # 第一步:移除含至少5个大写字母的路径段 processed = pattern_upper.sub('', s) # 第二步:移除?到:之间的所有内容 processed = pattern_question.sub('', processed) result.append(processed) return result # 示例测试 if __name__ == "__main__": input_list = [ 'helLo/aPPle/BuTTeRfLY:Missed', 'bliss/ScIENCEs/brew?Dyna=skjdk:Nest', 'Self/NESTeDsd/hello/MiSSInG:Good' ] output_list = process_string_list(input_list) print(output_list) # 运行输出与示例完全一致:['helLo/aPPle/:Missed', 'bliss//brew:Nest', 'Self//hello/:Good']
内容的提问来源于stack exchange,提问作者Atharva Deshmukh
相关产品推荐
相关产品推荐

