我有以下字符串:

4563_1_some_data

总的模式是

r'\d{1,5}_[1-4]_some_data

Note, that numbers before first underscore may be the same for different some_data
So the question is: how to get all possible variants of replacement using regex?
Desired output:

[4563_1_some_data, 4563_2_some_data, 4563_3_some_data, 4563_4_some_data]

我的try 是:

[re.sub(r'_\d_', r'_[1-4]_', row).group() for row in data]

但它产生了结果:

4563_[1-4]_some_data

看起来像是普通的替代品.我应该如何激活图案更换并获得 list ?

推荐答案

您需要迭代Range对象来创建您的列表.

  1. 创建range对象:要做到这一点,您需要一个模式来从您的模式中获取[1-4]部分.
  2. 您需要另一个模式来将实际数据中的数字替换为Range对象中的变量.
import re

text = "4563_1_some_data"
original_pattern = r"\d{1,5}_[1-4]_some_data"

# A regex to get the `[1-4]` part.
find_numbers_pattern = r"(?<=_)\[(\d)\-(\d)\](?=_)"

# Get `1` and `4` to create a range object
a, b = map(int, re.search(find_numbers_pattern, original_pattern).groups())

# Use `count=` to only change the first match.
lst = [re.sub(r"(?<=_)\d(?=_)", str(i), text, count=1) for i in range(a, b + 1)]

print(lst)

输出:

['4563_1_some_data', '4563_2_some_data', '4563_3_some_data', '4563_4_some_data']
(?<=_)\[(\d)\-(\d)\](?=_) explanation:

(?<=_):与_匹配的正向回溯断言.

\[(\d)\-(\d)\]:例如,为了获得[1-4].

(?=_):一个积极的前瞻断言,以找到_.

Python相关问答推荐

在Python中处理大量CSV文件中的数据

'discord.ext. commanders.cog没有属性监听器'

_repr_html_实现自定义__getattr_时未显示

为什么符号没有按顺序添加?

从groupby执行计算后创建新的子框架

如何使用pytest来查看Python中是否存在class attribution属性?

Python中的变量每次增加超过1

dask无groupby(ddf. agg([min,max])?''''

跳过嵌套JSON中的级别并转换为Pandas Rame

如何找出Pandas 图中的连续空值(NaN)?

如何在Python Pandas中填充外部连接后的列中填充DDL值

将链中的矩阵乘法应用于多组值

仅使用预先计算的排序获取排序元素

比较两个有条件的数据帧并删除所有不合格的数据帧

Pandas:将值从一列移动到适当的列

按条件计算将记录拆分成两条记录

无法使用请求模块从网页上抓取一些产品的名称

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?

将时间序列附加到数据帧

使用元组扩展字典的产品挑战