gpt4 book ai didi

Python 正则表达式 : matching a parenthesis within parenthesis

转载 作者:IT老高 更新时间:2023-10-28 20:59:29 26 4
gpt4 key购买 nike

我一直在尝试匹配以下字符串:

string = "TEMPLATES = ( ('index.html', 'home'), ('base.html', 'base'))"

但不幸的是我对正则表达式的了解非常有限,你可以看到有两个括号需要匹配,以及第二个里面的内容我尝试使用 re.match("\(w*\)", string) 但它不起作用,任何帮助将不胜感激。

最佳答案

试试这个:

import re
w = "TEMPLATES = ( ('index.html', 'home'), ('base.html', 'base'))"

# find outer parens
outer = re.compile("\((.+)\)")
m = outer.search(w)
inner_str = m.group(1)

# find inner pairs
innerre = re.compile("\('([^']+)', '([^']+)'\)")

results = innerre.findall(inner_str)
for x,y in results:
print("%s <-> %s" % (x,y))

输出:

index.html <-> home
base.html <-> base

说明:

outer 使用 \(\) 匹配括号的第一个起始组;默认情况下 search 找到最长的匹配项,给我们最外层的 ( ) 对。匹配 m 恰好包含那些外括号之间的内容;它的内容对应于outer.+位。

innerre 与您的 ('a', 'b') 对中的一个完全匹配,再次使用 \(\) 来匹配输入字符串中的内容括号,并使用 ' ' 内的两个组来匹配这些单引号内的字符串。

然后,我们使用 findall(而不是 searchmatch)来获取 innerre 的所有匹配项(而不仅仅是一个)。此时 results 是对的列表,如打印循环所示。

更新:为了匹配整个事情,你可以尝试这样的事情:

rx = re.compile("^TEMPLATES = \(.+\)")
rx.match(w)

关于Python 正则表达式 : matching a parenthesis within parenthesis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5357460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com