python - 如何在正则表达式的括号中获取分号
问题描述
对于以下C 源代码片段:
for (j=0; j<len; j++) a = (s) + (4); test = 5;
我想\n
在分号之后插入,;
除了使用python代码正则表达式模块的括号。
对于以下 C 源代码片段:
for (j=0; j<(len); (j++)) a = (s) + (4); test = 5;
正则表达式;(?![^(]*\))
有效,但不适用于第一段代码。
解决方案
您需要计算每个正则表达式匹配的开括号和闭括号,如果开括号多于闭括号,则仅插入换行符。这是在replacement() 中完成的,它在正则表达式的每个匹配项上调用。正则表达式搜索“(”和“)”只是为了计数,搜索“;” 离开它或插入换行符
import re
def replacement(matched_list):
global bracket_count
matched_char=matched_list.group(1)
if "(" in matched_char:
bracket_count += 1
# don't replace, just return what was found
return matched_char
elif ")" in matched_char:
bracket_count -= 1
# don't replace, just return what was found
return matched_char
elif ";" in matched_char:
# if we're inside brackets, insert \n
if bracket_count == 0:
return ';\n'
# if not, leave it intact
else:
return ';'
# example 1
bracket_count=0
code="for (j=0; j<len; j++) a = (s) + (4); test = 5;"
new_code = re.sub('([();] ?)', replacement, code)
print(code)
print(new_code)
# example 2
bracket_count=0
code="for (j=0; j<(len); (j++)) a = (s) + (4); test = 5;"
new_code = re.sub('([();])', replacement, code)
print(code)
print(new_code)
# example 3
bracket_count=0
code="for (j=0; j<len; j++) test = 5; a = (s) + (4);"
new_code = re.sub('([();])', replacement, code)
print(code)
print(new_code)
结果:
for (j=0; j<len; j++) a = (s) + (4); test = 5;
for (j=0; j<len; j++) a = (s) + (4);
test = 5;
for (j=0; j<(len); (j++)) a = (s) + (4); test = 5;
for (j=0; j<(len); (j++)) a = (s) + (4);
test = 5;
推荐阅读
- javascript - 异步 Promise 在执行之前存储在 JavaScript 中的什么位置?
- amazon-web-services - AWS Cognito 是否有 REST 终端节点?
- android - 如何根据导航库目标更改 AppBarLayout 内容
- sql-server - 表没有主键 idpdf
- javascript - 我如何在Javascript中的循环内循环
- python - python中维度数组的长度
- c++ - Buildroot 在更改我的源代码后清理我的依赖项
- c++ - 如何通过 C++ 可执行文件中的清单启用“长路径感知”行为?
- linux - 变量显示在终端中,而不是附加到 Bash 上的文件中
- javascript - 关于 JavaScript 中 Promise 的一些问题