我无法为以下内容编写正则表达式。我有一个文字向量(请参阅RE_LIT),我想在文本行中查找所有向量,但是我很难编写正则表达式。具体来说,我似乎有问题,括号作为组而不是括号。嵌套正则表达式(python)
RE_LABEL1 = r'[cvx]\d+(?![.]r)$'
RE_LABEL2 = r'v\d+\.r\d+'
RE_LABEL = r'(%s)|(%s)' % (RE_LABEL1, RE_LABEL2)
RE_LIT = r'!?%s' % RE_LABEL
RE_VEC = r'\[\s*(\s*%s\s*,?\s*)+\s*\]' % RE_LIT
例字符串匹配:
test = 'c1 = blah([v3,v4,v5.r1,!v6,v7,x8,v9,v10], [v1, v2], [x5.r1])'
预期结果:
> print re.findall(RE_VEC, test)
['[v3,v4,v5.r1,!v6,v7,x8,v9,v10]', '[v1, v2]']
谢谢你的时间提前对您有所帮助。
*“我似乎有问题,括号作为组而不是括号”* - 括号在正则表达式中有含义。如果你希望它们只是字符,*用前缀反斜杠*转义它们:'\('。你的例子不是一个非常有用的测试,因为'r'\ [[^]] +]''可以正常工作... – jonrsharpe
Jonrsharpe:如果我要使用这种方法,我将如何确保列表中的条目是文字(RE_LIT)而不仅仅是字符? – fcimeson
是的括号在正则表达式中有意义,但是是否有一些机制会像圆括号通常用于嵌套? – fcimeson