Python正则表达式:移除双特定子串提取中间内容及原理解析
问题描述
给定字符串:
s: str = 'ENGBNAmphitheatre Pkwy\x1e\x1eNASY%am|fi|te|"a|tre;ENGY*"{m|fI|%Ti|t@r;ENGY"{m|fI|%Ti|t@r *"pArk|%we;NASY%am|fi|te|"a|tre "par|kwei'
要求通过单次正则替换移除两个特定子串,提取中间目标内容:
- 开头的
ENGBN - 包含特殊字符(如
\x1e)的特定子串:
pat2: str = """\x1e\x1eNASY%am|fi|te|"a|tre;ENGY*"{m|fI|%Ti|t@r;ENGY"{m|fI|%Ti|t@r *"pArk|%we;NASY%am|fi|te|"a|tre "par|kwei"""
期望结果:
result: str = "Amphitheatre Pkwy"
解决方案
代码实现
import re s = 'ENGBNAmphitheatre Pkwy\x1e\x1eNASY%am|fi|te|"a|tre;ENGY*"{m|fI|%Ti|t@r;ENGY"{m|fI|%Ti|t@r *"pArk|%we;NASY%am|fi|te|"a|tre "par|kwei' # 构建复合正则模式 pattern = r'^ENGBN|' + re.escape(r'\x1e\x1eNASY%am|fi|te|"a|tre;ENGY*"{m|fI|%Ti|t@r;ENGY"{m|fI|%Ti|t@r *"pArk|%we;NASY%am|fi|te|"a|tre "par|kwei') result = re.sub(pattern, '', s) print(result) # 输出: Amphitheatre Pkwy
正则表达式工作原理
^ENGBN:^是行首锚定符,确保只匹配字符串开头的ENGBN,避免误匹配中间出现的相同字符组合。|:正则中的逻辑或运算符,连接两个独立的匹配规则,只要子串满足任意一个规则就会被替换。re.escape(...):由于pat2包含大量正则特殊字符(如|、*、"、;等),这些字符在正则语法中有特殊含义,re.escape会将它们转义为普通文本字符,保证完全匹配指定的目标子串,不会被解析为正则语法。re.sub(pattern, '', s):单次调用替换方法,将所有匹配到的子串直接替换为空字符串,一步得到目标内容。
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

