gpt4 book ai didi

python - 在 Python 中捕获重复模式

转载 作者:行者123 更新时间:2023-12-04 10:24:12 24 4
gpt4 key购买 nike

我正在尝试为 Python 日志格式化程序实现某种类似 Markdown 的行为。

我们以这个字符串为例:
**This is a warning**: Virus manager __failed__
几个正则表达式之后,该字符串已经失去了类似语法的 Markdown 并变成了 bash 代码:
\033[33m\033[1mThis is a warning\033[0m: Virus manager \033[4mfailed\033[0m\033[0m
但这应该压缩为
\033[33;1mThis is a warning\033[0m: Virus manager \033[4mfailed\033[0m
除了许多其他非工作解决方案之外,我还尝试了这些:
(\\033\[([\d]+)m){2,} => 捕获:\033[33m\033[1m与 g1 '\033[1m' 和 g2 '1' 和 \033[0m\033[0m与 g1 '\033[0m' 和 g2 '0'
(\\033\[([\d]+)m)+很多结果,不好
(?:(\\033\[([\d]+)m)+)许多结果,尽管如果我理解正确,这是重复模式的推荐方式,但不行

和别的..

我的目标是获得以下结果:

输入\033[33m\033[1mThis is a warning\033[0m: Virus manager \033[4mfailed\033[0m\033[0m
输出

第 1 场 033[33m\033[1m
第一组:33

第2组:1

第 2 场 033[0m\033[0m
第 1 组:0

第 2 组:0

换句话说,捕获“重复”的那些而不是单独的那些,这样我就可以将它们与正则表达式子融合。

最佳答案

您要连续重复匹配 \033[\d+m文本块并加入 [ 后面的数字带分号。

您可以使用

re.sub(r'(?:\\033\[\d+m){2,}', lambda m: r'\033['+";".join(set(re.findall(r"\[(\d+)", m.group())))+'m', text)

Python demo online
(?:\\033\[\d+m){2,}模式将匹配 \033[ 的两个或多个序列+ 一位或多位数字 + m文本块,然后匹配将传递给 lambda 表达式,其中输出将是:1) \033[ , 2) [ 之后的所有数字用 re.findall(r"\[(\d+)", m.group()) 提取并使用 set 进行重复数据删除,然后 3) m .

关于python - 在 Python 中捕获重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60696100/

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