验证json中指定的python正则表达式标志

时间:2017-09-10 21:09:28

标签: python regex

我正在编写一个通过json文件接受用户配置的工具。这个配置的一部分是python正则表达式和一些可选的正则表达式标志。目前,正则表达式标志的配置是一个整数数组,它们都将通过按位或(|)运行并发送到重新编译方法。

我的问题是如何验证这些整数以确保它们是有效的重新标记?

编辑:或者可能是我问题的另一个解决方案......用户是否可以在JSON中指定实际的重新标记?即,[re.DEBUG,re.IGNORECASE]等等然后以某种方式从我的python脚本中的JSON文件中翻译它们?

1 个答案:

答案 0 :(得分:1)

您可以定义所有可能标记的字典(它们很少,请参阅re 6.2.2. Module Contents),然后通过相应的键获取值。

A Python demo

import re
re_flags = { 're.A' : re.A, 
    're.ASCII' : re.ASCII,
    're.DEBUG' : re.DEBUG,
    're.I' : re.I,
    're.IGNORECASE' : re.IGNORECASE,
    're.L' : re.L,
    're.LOCALE' : re.LOCALE,
    're.M' : re.M,
    're.MULTILINE' : re.MULTILINE,
    're.S' : re.S,
    're.DOTALL' : re.DOTALL,
    're.X' : re.X,
    're.VERBOSE' : re.VERBOSE }
flg = 're.I'                      # User input
if flg in re_flags:               # If the dict contains the key
    print(re_flags[flg])          # Print the value (re.I = 2)

如果您仍想使用数字代替:

import re
print(re.A)           # 256
print(re.ASCII)       # 256
print(re.DEBUG)       # 128
print(re.I)           # 2
print(re.IGNORECASE)  # 2
print(re.L)           # 4
print(re.LOCALE)      # 4
print(re.M)           # 8
print(re.MULTILINE)   # 8
print(re.S)           # 16
print(re.DOTALL)      # 16
print(re.X)           # 64
print(re.VERBOSE)     # 64