python - 替换重复捕获

标签 python regex

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

相关文章:

python - 从python脚本获取输出到django

python - 如何使用 Python 从 RESTful 服务获取 JSON 数据?

python - Beautiful Soup 试图获取有关 <code>/<-- 评论标签的信息

Python Pandas : float values break down when df. 列 = df.columns.droplevel()

python - 读取/写入 Parquet 文件而不读入内存(使用 Python)

php - 如何使用正则表达式查找非拉丁字符的单次出现?

java - 为 Scanner 方法编写模式

java - Java中如何检查输入的数字是否有效

c# - 我的正则表达式没有返回我需要的内容

ruby - 将字符串插入正则表达式