Python - re.sub 返回模式而不是替换

Posted

技术标签:

【中文标题】Python - re.sub 返回模式而不是替换【英文标题】:Python - re.sub return pattern rather than replacing 【发布时间】:2020-08-03 05:19:23 【问题描述】:

我正在尝试修改 Python 3 中的字典键列表,以便它们可以通过字典中的第一组数字来识别,但它似乎返回的是正则表达式模式而不是数字集。

>>>> import re
>>>>re.sub(r'GraphImages_[0-9]2_edge_media_to_caption_edges_0_node_text', '(?<=GraphImages_)\n3', 'GraphImages_99_edge_media_to_caption_edges_0_node_text')
'(?<=GraphImages_)\n3'
>>>>re.sub(r'GraphImages_[0-9]2_edge_media_to_caption_edges_0_node_text', '(?<=GraphImages_)\n3', 'GraphImages_123_edge_media_to_caption_edges_0_node_text')
'(?<=GraphImages_)\n3'

当上述输出的预期输出分别为99123 时。

任何指导将不胜感激。我不太擅长re

【问题讨论】:

【参考方案1】:

如果你只是想提取数字,你需要找到它们,而不是替换:

re.findall("GraphImages_([0-9]2,)", yourstring)[0]
#'99'

事实上,在您的情况下,拆分可能是更好的选择:

yourstring.split("_")[1]
#'99'

【讨论】:

【参考方案2】:

在下面找到了一个麻烦的解决方法

try_1 = re.sub('[^0-9]', "", 'GraphImages_99_edge_media_to_caption_edges_0_node_text')
try_2 = re.sub( '0$', "" , try_1)

【讨论】:

【参考方案3】:

你可以使用

^\D+(\d+).+

查看demo on regex101.com.

【讨论】:

感谢您的建议!我得到以下好奇的回溯。 error: bad escape \D at position 1 这导致额外的/ 无济于事 这就是说我不认为这是你或我的正则表达式的问题,但我对re.sub缺乏了解

以上是关于Python - re.sub 返回模式而不是替换的主要内容,如果未能解决你的问题,请参考以下文章

python__标准库 : 正则表达式(re)

re.sub()介绍和用法

在 re.sub 替换模式中处理对捕获组的反向引用

python re.sub详解

为re.sub替换参数转义Python正则表达式字符串? [复制]

带有标志的 Python re.sub 不会替换所有出现