可以在打印之前清理冗长的python正则表达式吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了可以在打印之前清理冗长的python正则表达式吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2615字,纯文字阅读大概需要4分钟。
内容图文
![可以在打印之前清理冗长的python正则表达式吗?](/upload/InfoBanner/zyjiaocheng/683/66b1c4498ae941cab7e708d013258644.jpg)
设置:
假设我在脚本中定义了以下正则表达式.我想保留评论以备将来之用,因为我很健忘.
RE_TEST = re.compile(r"""[0-9] # 1 Number
[A-Z] # 1 Uppercase Letter
[a-y] # 1 lowercase, but not z
z # gotta have z...
""",
re.VERBOSE)
print(magic_function(RE_TEST)) # returns: "[0-9][A-Z][a-y]z"
问题:
Python(3.4)是否可以将其转换为简单字符串“ [0-9] [A-Z] [a-y] z”?
可能的解决方案:
This question (“strip a verbose python regex”)似乎非常接近我的要求,它是answered.但这是几年前的事,所以我想知道是否找到了新的(最好是内置的)解决方案.
除上述之外,还有其他变通方法,例如使用隐式字符串串联,然后使用.pattern属性:
RE_TEST = re.compile(r"[0-9]" # 1 Number
r"[A-Z]" # 1 Uppercase Letter
r"[a-y]" # 1 lowercase, but not z
r"z", # gotta have z...
re.VERBOSE)
print(RE_TEST.pattern) # returns: "[0-9][A-Z][a-y]z"
或仅单独注释模式而不编译它:
# matches pattern "nXxz"
RE_TEST = "[0-9][A-Z][a-y]z"
print(RE_TEST)
但是我真的很想保持编译后的正则表达式不变(第一个示例).也许我是从某个文件中提取正则表达式字符串,而该文件已经使用了详细形式.
背景
我问是因为我想建议对unittest模块进行编辑.
现在,如果您使用带有注释的已编译模式运行assertRegex(string,pattern),并且断言失败,则打印输出将很难看(以下是虚拟正则表达式):
Traceback (most recent call last):
File "verify_yaml.py", line 113, in test_verify_mask_names
self.assertRegex(mask, RE_MASK)
AssertionError: Regex didn't match: '(X[1-9]X[0-9]{2}) # comment\n |(XXX[0-9]{2}) # comment\n |(XXXX[0-9E]) # comment\n |(XXXX[O1-9]) # c
omment\n |(XXX[0-9][0-9]) # comment\n |(XXXX[
1-9]) # comment\n ' not found in 'string'
我要提出的是,assertRegex和assertNotRegex方法在打印正则表达式之前会删除正则表达式,方法是删除注释和多余的空格,或者通过不同方式打印它.
解决方法:
通过sre_parse处理此问题的方式来看,确实没有任何地方可以将冗长的正则表达式“转换”为常规的正则表达式然后进行解析.而是,将您详细的正则表达式直接馈入解析器,其中VERBOSE标志的存在使其忽略字符类之外的未转义空格,如果它不在字符类或捕获内,则从未转义的#到行尾.组(文档中缺少).
解析详细的正则表达式的结果不是“ [0-9] [A-Z] [a-y] z”.而是:
[(IN, [(RANGE, (48, 57))]), (IN, [(RANGE, (65, 90))]), (IN, [(RANGE, (97, 121))]), (LITERAL, 122)]
为了正确完成将详细的正则表达式转换为“ [0-9] [A-Z] [a-y] z”的工作,您可以自己解析.您可以使用像pyparsing这样的库来执行此操作.问题中链接的另一个答案使用正则表达式,该表达式通常不会正确复制行为(特别是字符类内部的空格和捕获组/字符类内部的#.甚至只是处理转义也不如使用好的解析器方便. )
内容总结
以上是互联网集市为您收集整理的可以在打印之前清理冗长的python正则表达式吗?全部内容,希望文章能够帮你解决可以在打印之前清理冗长的python正则表达式吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。