在python中构建详细的正则表达式
我试图构建一个依赖于来自许多不同来源的变量的正则表达式 资料来源:在python中构建详细的正则表达式,python,regex,Python,Regex,我试图构建一个依赖于来自许多不同来源的变量的正则表达式 资料来源: dict1 = {"a":"somevalue","b":"somevalue","c":"somevalue"} source2 = "x" source3 = "_1" 我想构建一个正则表达式,它将取决于我将从上述来源获得的值。 生成的正则表达式如下所示 ^(a|b|c)x[0-9]{0,10}_1 其中: (a | b | c)是dict1的键,dict可以有一个或多个值 x是来自source2的值 -1是我将从源3
dict1 = {"a":"somevalue","b":"somevalue","c":"somevalue"}
source2 = "x"
source3 = "_1"
我想构建一个正则表达式,它将取决于我将从上述来源获得的值。
生成的正则表达式如下所示
^(a|b|c)x[0-9]{0,10}_1
其中:
是(a | b | c)
的键,dict1
可以有一个或多个值dict
是来自x
的值source2
是我将从-1
获取的值源3
group1 = "|".join(dict1.keys())
regex = "^("+group1+")"+source2+"[0-9]{0,10}"+source3
谢谢你的帮助。可能是
re.verbose
?但是我不确定什么是最好的方法。只要表达式足够简单,您也可以通过手动解析来避免正则表达式逃避麻烦:
def parse(s):
assert max(len(k) for k in dict1) == 1 and len(source2) == 1 #keep it simple
match = (s[0:1] in dict1 and
s[1:2] == source2 and
all(c in string.digits for c in s[2:-2]) and
len(s[2:-2]) <= 10 and
s[-2:] == source3)
return s[0] if match else None
def解析:
断言max(len(k)表示dict1中的k)==1和len(source2)==1#保持简单
match=(第1条中的s[0:1]和
s[1:2]==源2和
所有(字符串中的c。s[2:-2]中的c的数字)和
len(s[2:-2])您可以在以下位置使用htql.RegEx:
import htql;
a=htql.RegEx();
a.setNameSet('group1', dict1.keys() )
a.setNameSet('x', [source2])
a.setNameSet('x1', [source3])
results=a.reSearchStr(address, "^&[s:group1]&[s:x][0-9]{0,10}&[s:x1]", case=False);
似乎是合理的。只要确保您的输入正确地包含保留字符,例如,source2=“.”
只是对基本思想进行了一些小的调整:regex=“^(%s)%s[0-9]{0,10}%s”%(“|”。.join(dict1),source2,source3)