Python中是否存在正则表达式令牌合并精简的实现机制?
Python 中精简正则表达式的方法
结论
Python标准库的re模块没有内置自动精简正则表达式的功能——re.compile()仅负责编译正则规则,不会对输入的模式字符串做任何简化,所以pattern属性返回的就是原始输入内容。
可行解决方案
1. 第三方工具库
可以使用专门处理正则简化的第三方库,比如regexp-simplify,它能完成你提到的这类基础简化操作:
- 将重复的元字符(如
...)转换为带量词的形式(.{3}) - 合并连续的同类型量词规则(如
.{3}.{5}合并为.{8},.{3,5}.{2,5}合并为.{5,10})
2. 自行实现基础简化逻辑
如果只需要处理你示例中的特定场景,可以自己编写轻量脚本实现。比如针对.的连续量词合并,示例代码如下:
import re def simplify_dot_based_regex(pattern): # 先把连续的.转换成带量词的形式 pattern = re.sub(r'\.(\.+)?', lambda m: f'.{{{1 + len(m.group(1) or "")}}}', pattern) # 匹配连续的.{n}或.{n,m}格式并合并 def merge_quantifiers(match): components = match.group(0).split('.{')[1:] min_sum = 0 max_sum = 0 for comp in components: nums = comp.rstrip('}').split(',') min_n = int(nums[0]) min_sum += min_n if len(nums) == 1: max_sum += min_n else: max_n = int(nums[1]) if nums[1] else float('inf') max_sum += max_n if max_sum == float('inf'): return f'.{{{min_sum},}}' elif min_sum == max_sum: return f'.{{{min_sum}}}' else: return f'.{{{min_sum},{max_sum}}}' return re.compile(r'(\.\{(\d+)(?:,(\d+))?\})+').sub(merge_quantifiers, pattern) # 测试用例 print(simplify_dot_based_regex(r'...')) # 输出: .{3} print(simplify_dot_based_regex(r'.{3}.{5}')) # 输出: .{8} print(simplify_dot_based_regex(r'.{3,5}.{2,5}')) # 输出: .{5,10}
这个脚本仅处理.相关的简化,若要支持更多正则元素(如字面量、字符集),需要扩展令牌解析和合并逻辑。
内容的提问来源于stack exchange,提问作者rothloup
相关产品推荐
相关产品推荐

