我对正则表达式非常非常陌生。我大约 3 小时前才拿起它,但我碰到了一个障碍,我似乎无法动摇它。所以,和往常一样,我求助于互联网来解决我所有的问题,当它无法向我解释答案时,我在 stackoverflow 上搜索,看看是否有人问过我的问题,最后刚刚发布了一个新问题我无法通过浏览自己回答。
我会稍微简化一下我正在尝试做的事情,因为我已经弄清楚了其中的大部分内容,但是其中的一小部分并没有按照我想要的方式工作,或者实际上根本没有,整个混乱是复杂且难以解释的,但最后,我有一大堆字符串我想运行一个正则表达式。
因此,在重复循环中,我传递了一个包含变量名的字符串。现在,我很难解释变量可能是什么样子,所以我只是列出示例,然后是一个管道,然后是我想要提取的内容。
Variable | (Variable)
Variable.list[3]name | (Variable.list[3]name)
Var.list[5] | (Var.list , 5)
Var.list_name[3]thing_words[4][3][2] | (Var.list_name[3]thing_words , 4 , 3 , 2)
Var[3] | (Var , 3)
Var.word | (Var.word)
等等。我认为这很清楚,对吧?我想要变量名称,它可能包含也可能不包含括号,如果有任何尾括号,我想将它们从名称中排除并捕获它们,以便我可以从 match.groups() 访问它们。我认为没有任何变量的名称以 ...[] 结尾,但内部没有数字,但可能有,如果有,我也想忽略它们。
现在我正在尝试做类似的事情:
for line in list:
regex = re.compile("^[-\w\[\]\.]+(\[(0-9)*]\])*$")
match = regex.match(line)
if match:
do something that depends on len( match.groups() )
但是......它不起作用。正则表达式从不匹配,即使我认为它应该匹配。
在我心里,我说得很清楚!我希望它以一堆东西开头,并可能以一堆括号内的数字结尾,如果它以括号内的数字结尾,则捕获并存储它们,但忽略任何不在字符串末尾的括号内的数字。
所以......现在我已经彻底解释了自己,以至于有点多余......我该怎么做才能让它按我想要的方式工作?甚至可以按照我尝试的方式完成吗?我是否应该做更多类似的事情:
while (match.endswith("]")
match.strip("]")
func()
match.strip("[")
func() 在哪里做一个正则表达式来去掉末尾的数字?这似乎过于复杂,而且非常混乱。我的直觉告诉我正则表达式可以处理它,而我的新手眼睛就是看不到如何处理。