Regex 如何使用正则表达式和替换值从代码中选择子括号

Regex 如何使用正则表达式和替换值从代码中选择子括号,regex,string,python-3.7,Regex,String,Python 3.7,只是一个与python正则表达式相关的基本问题。 我的密码是 void main void() { abc { tune } { wao } } 我想用不同的值替换abc、tune和wao,比如abc=u、tune=p和wao=m 我无法在正则表达式中选择这两个子括号中的代码 我正在使用的正则表达式是\{[^}]+\}。 我想写一个代码,用这种方式替换这些值,首先替换所有的子括号,即tune=p和wao=m,然后替换主括号abc=u。如果您确实想使用regex,以下将适用于给定的

只是一个与python正则表达式相关的基本问题。 我的密码是

void main void() 
{
abc
 {
 tune
 }
 {
 wao
 }
}
我想用不同的值替换abc、tune和wao,比如abc=u、tune=p和wao=m

我无法在正则表达式中选择这两个子括号中的代码

我正在使用的正则表达式是\{[^}]+\}。 我想写一个代码,用这种方式替换这些值,首先替换所有的子括号,即tune=p和wao=m,然后替换主括号abc=u。

如果您确实想使用regex,以下将适用于给定的示例:

import re

code = """void main void()
{
abc
 {
 tune
 }
 {
 wao
 }
}
"""

code = re.sub(r"({\s*)[^{\s]+(\s*{)", r"\1u\2", code)
code = re.sub(r"({\s*)[^{\s]+(\s*})(?=\s*{)", r"\1p\2", code)
code = re.sub(r"({\s*)[^{\s]+(\s*})(?=\s*})", r"\1m\2", code)
print(code)
输出:

void main void()
{
u
 {
 p
 }
 {
 m
 }
}

但在一般情况下,建议按照@wim的建议进行有状态解析。

使用正则表达式非常困难,最好进行有状态解析。你能用有状态解析来完成这段代码吗?恐怕不行。正则表达式不是解析器。如果您对替换的要求不是那么复杂,我们可以对上面的正则表达式进行一些小的调整。如果在支架结构、嵌套水平等方面有很多变化。,我们需要从一个不同的方法开始。我需要提取括号内的所有代码,然后使用提取的代码进行进一步处理,因此我可能需要1000多行代码,其中使用了函数中的函数,因此括号中使用了括号。因此,我需要一个代码,可以检测括号内的括号,并可以从中提取代码进行进一步处理。您能否提供一些实际的示例,这些示例是最小的,但足以涵盖可能的变化,以澄清要求?'strings_s strings[]={define s_file 0{\xCB\x95\x99\x95,0},define s_files 1{\xC4\xDE\xC8\x9E\x9F\x83\xC8\xD5\xC8,0},定义s_mute 2{\xCC\xDE\xC9\x80\x9B\x86\x9D\x94\x99\x94\x94\x9A\xF2,0},}'在这段代码中,字符串函数有自己的方括号,定义的字符串有自己的方括号。所以我使用这个正则表达式{[^]+[^]+}要仅获取字符串函数方括号,而不是检测字符串函数,请使用两个方括号{&}。此正则表达式仅查找第一个方括号{String'函数和define s_file函数的方括号}