带数字的Python正则表达式问题

2024-09-28 21:43:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找到一堆文件名中3或4位数字后的空格,并用下划线替换空格。但我好像连4个数字都找不到。你知道吗

s = "the blue dog and blue cat wore blue hats"
p = re.compile(r'blue (?P<animal>dog|cat)')
print(p.sub(r'gray \g<animal>',s))

#Gives basically what I want.
the gray dog and gray cat wore blue hats


s = "7053 MyFile.pptx"
p = re.compile('[0-9][0-9][0-9][0-9](?P<dig> )')
print(p.sub('_\g<dig>', s))

#Takes out the numbers, which I need to keep
_ MyFile.pptx

我似乎做的每件事都有一个去掉数字的表达式,我需要保留它。你知道吗

最后,我想

7035个我的文件.pptx你知道吗

成为

7035个_我的文件.pptx你知道吗


Tags: andthere数字bluecat空格print
1条回答
网友
1楼 · 发布于 2024-09-28 21:43:17

如果要将3或4位数字后跟空格替换为相同的数字后跟下划线,则正确的正则表达式语法/替换为:

re.sub(r"([0-9]{3,4})\s", r"\1_", s)

您可能误读了组/反向引用的工作方式。组中应该包含的内容,需要在括号内。如果要使用命名组(这有点不必要):

re.sub(r"(?P<dig>[0-9]{3,4})\s", r"\g<dig>_", s)

或者使用类似于您的示例的预编译正则表达式:

s = "7053 MyFile.pptx"
p = re.compile(r"(?P<dig>[0-9]{3,4})\s")
print(p.sub('\g<dig>_', s))

{3,4}后面的[0-9]表示三到四个匹配项。\s代表空格(不仅仅是空格)。你知道吗

实际上,只要查找3位数字就可以匹配4位数字,因为我们不限制匹配模式之前发生的事情。根据您要查找的内容,您可能希望通过在模式前面的字边缘加上^(行首)或\b空字符来限制匹配。。。你知道吗

相关问题 更多 >