gpt4 book ai didi

python正则表达式删除匹配的括号文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:46 24 4
gpt4 key购买 nike

我有一个 Latex 文件,其中很多文本都用 \red{} 标记,但 \red{} 中也可能有方括号,例如 \red{这里是\underline{带下划线}的文本}。我想删除红色,经过一些谷歌搜索后我写了这个 python 脚本:

import os, re, sys
#Start program in terminal with
#python RedRemover.py filename
#sys.argv[1] then has the value filename
ifn = sys.argv[1]
#Open file and read it
f = open(ifn, "r")
c = f.read()
#The whole file content is now stored in the string c
#Remove occurences of \red{...} in c
c=re.sub(r'\\red\{(?:[^\}|]*\|)?([^\}|]*)\}', r'\1', c)
#Write c into new file
Nf=open("RedRemoved_"+ifn,"w")
Nf.write(c)

f.close()
Nf.close()

但这会转换

\red{here is \underline{underlined} text}

here is \underline{underlined text}

这不是我想要的。我要

here is \underline{underlined} text

最佳答案

您不能将未确定级别的嵌套括号与 re 模块匹配,因为它不支持递归。要解决这个问题,您可以使用 new regex module :

import regex

c = r'\red{here is \underline{underlined} text}'

c = regex.sub(r'\\red({((?>[^{}]+|(?1))*)})', r'\2', c)

其中 (?1) 是对捕获组 1 的递归调用。

关于python正则表达式删除匹配的括号文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014731/

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