如何遍历并打印re.compile生成的正则模式中的每个元素?
问题描述
我想通过打印编译后的正则模式的每个元素,验证正则表达式是否编译正确。试了下面的代码:
import re regex = re.compile('[A-z]') for l in regex: # 这行触发TypeError print(l)
结果出现错误:
TypeError: 're.Pattern' object is not iterable
请问有没有办法打印出如下内容?
A B C ...
解决方案
首先明确:re.compile()返回的是不可迭代的Pattern对象,不能直接遍历它。如果要获取[A-z]匹配的所有字符,有两种实用方法:
方法1:直接生成目标字符序列
如果你的需求是打印A到Z的大写字母(从示例输出看),可以直接用Python内置的string模块生成,完全不需要正则:
import string for char in string.ascii_uppercase: print(char)
要是你确实需要[A-z]实际匹配的全部字符(注意这个正则范围不仅包含大小写字母,还包含[、\、]、^、_、`这些ASCII码介于A和z之间的字符),可以遍历对应的ASCII码区间:
for ascii_code in range(ord('A'), ord('z') + 1): print(chr(ascii_code))
方法2:通过正则筛选字符库
如果一定要借助正则来验证匹配逻辑,可以先生成所有候选字符,再用正则筛选出匹配项:
import re regex = re.compile('[A-z]') # 生成所有ASCII可打印字符 all_printable_chars = [chr(c) for c in range(32, 127)] # 筛选出符合正则的字符 matched_chars = [char for char in all_printable_chars if regex.match(char)] for char in matched_chars: print(char)
内容的提问来源于stack exchange,提问作者Sabatino Ognibene
相关产品推荐
相关产品推荐

