这是对 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/