gpt4 book ai didi

python - 替换重复捕获

转载 作者:IT老高 更新时间:2023-10-28 20:21:31 24 4
gpt4 key购买 nike

这是对 Python regex - Replace single quotes and brackets 的跟进。线程。

任务:

示例输入字符串:

RSQ(name['BAKD DK'], name['A DKJ'])
SMT(name['BAKD DK'], name['A DKJ'], name['S QRT'])

期望的输出:

XYZ(BAKD DK, A DKJ)
XYZ(BAKD DK, A DKJ, S QRT)

name['something'] 类项目的数量是变量

目前的解决方案:

目前,我正在通过 两个单独的 re.sub() 调用:

>>> import re
>>>
>>> s = "RSQ(name['BAKD DK'], name['A DKJ'])"
>>> s1 = re.sub(r"^(\w+)", "XYZ", s)
>>> re.sub(r"name\['(.*?)'\]", r"\1", s1)
'XYZ(BAKD DK, A DKJ)'

问题:

是否可以将这两个 re.sub() 调用合并为一个调用?

换句话说,我想替换字符串开头的一些内容,然后替换多个类似的内容,一次完成。


我查看了 regex module - 它的能力capture repeated patterns看起来很有希望,尝试使用 regex.subf() 但未能成功。

最佳答案

您确实可以使用正则表达式模块和重复捕获。主要兴趣是您可以检查匹配字符串的结构:

import regex

regO = regex.compile(r'''
\w+ \( (?: name\['([^']*)'] (?: ,[ ] | (?=\)) ) )* \)
''', regex.VERBOSE);

regO.sub(lambda m: 'XYZ(' + (', '.join(m.captures(1))) + ')', s)

(请注意,您可以将 "name" 替换为 \w+ 或任何您想要的没有问题的东西。)

关于python - 替换重复捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381249/

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