【发布时间】:2018-05-03 23:00:24
【问题描述】:
我需要用某个任意值替换正则表达式的捕获组内的值;我看过re.sub,但它似乎以不同的方式工作。
我有一个这样的字符串:
s = 'monthday=1, month=5, year=2018'
我有一个正则表达式与捕获的组匹配,如下所示:
regex = re.compile('monthday=(?P<d>\d{1,2}), month=(?P<m>\d{1,2}), year=(?P<Y>20\d{2})')
现在我想将名为 d 的组替换为 aaa,将名为 m 的组替换为 bbb,并将名为 Y 的组替换使用ccc,如下例所示:
'monthday=aaa, month=bbb, year=ccc'
基本上我想保留所有不匹配的字符串并用一些任意值替换匹配组。
有没有办法达到预期的效果?
注意
这只是一个例子,我可以有其他结构不同但名称相同的输入正则表达式捕获组...
更新
由于似乎大多数人都在关注样本数据,所以我添加了另一个样本,假设我有这个其他输入数据和正则表达式:
input = '2018-12-12'
regex = '((?P<Y>20\d{2})-(?P<m>[0-1]?\d)-(?P<d>\d{2}))'
如您所见,我仍然有相同数量的捕获组 (3),并且它们的命名方式相同,但结构完全不同......我需要的是和之前一样用一些任意替换捕获组文字:
'ccc-bbb-aaa'
将名为Y 的捕获组替换为ccc,将名为m 的捕获组替换为bbb,将名为d 的捕获组替换为aaa。
在这种情况下,正则表达式并不是这项工作的最佳工具,我愿意接受其他一些可以实现我的目标的建议。
【问题讨论】:
-
regex.sub('monthday=aaa, month=bbb, year=ccc', s) -
@Rawing 使用您的解决方案我需要对新结果进行硬编码,但这不是我想要的......我想用一些任意值替换匹配组。这只是一个示例,我可以使用其他结构不同但名称相同的输入正则表达式捕获组...
-
@Rawing 阅读了问题的第一行:“我需要用一些任意值替换正则表达式的捕获组内的值”,这不是您的解决方案实际在做的事情.. .
-
@Rawing 输入正则表达式和输入文本可能会改变,固定的是我需要用其他一些数据替换的捕获组的名称,如果你愿意,我可以再添加十几个示例数据具有不同结构但相同数量和命名的捕获组...
-
@RomanPerekhrest 我已更新问题以使其更清晰。
标签: python regex python-2.7