Python 为什么这个正则表达式只捕获最后一个数字?

Python 为什么这个正则表达式只捕获最后一个数字?,python,regex,Python,Regex,从我的代码中,应该很容易看出我在尝试做什么 for path in glob.glob("orig_data/*.*"): pattern = ".*(\d+\.).*" new_name = re.sub(pattern, r'\1txt', path) copyfile(path, 'orig_data_renamed/'+new_name) 我只想保留紧跟在事件之前的数字。文件名,但它没有 下面是一个示例输出 some_folder/asdf321428.txt

从我的代码中,应该很容易看出我在尝试做什么

for path in glob.glob("orig_data/*.*"):
    pattern = ".*(\d+\.).*"
    new_name = re.sub(pattern, r'\1txt', path)
    copyfile(path, 'orig_data_renamed/'+new_name)
我只想保留紧跟在事件之前的数字。文件名,但它没有

下面是一个示例输出

some_folder/asdf321428.txt
8.txt
问题显然出在“+”上,但我不确定它想要什么

(\S*?)(\d*)\.txt
在这里可能行

测验 输出 如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况

也许

(\S*?)(\d*)\.txt
在这里可能行

测验 输出 如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况

这是一个re.sub解决方案,也使用字符串拆分。我们可以在separator/上拆分输入路径,然后使用最后一个元素获得数字。我们对re.sub进行第二次调用,以隔离刚好出现在点之前的数字

path = "some_folder/asdf321428.txt"
nums = re.sub(r'^.*?(\d+)\.\w+$', '\\1', path.split("/")[-1])
print(nums)
这张照片是:

321428
如果只需要文件名,请尝试以下版本:

path = "some_folder/asdf321428.txt"
nums = re.sub(r'^.*?(?=\d+\.\w+$)$', '', path.split("/")[-1])
print(nums)
这是一个re.sub解决方案,也使用字符串拆分。我们可以在separator/上拆分输入路径,然后使用最后一个元素获得数字。我们对re.sub进行第二次调用,以隔离刚好出现在点之前的数字

path = "some_folder/asdf321428.txt"
nums = re.sub(r'^.*?(\d+)\.\w+$', '\\1', path.split("/")[-1])
print(nums)
这张照片是:

321428
如果只需要文件名,请尝试以下版本:

path = "some_folder/asdf321428.txt"
nums = re.sub(r'^.*?(?=\d+\.\w+$)$', '', path.split("/")[-1])
print(nums)
你说你想保留这些数字,但是你用re.sub做的是替换这些数字。您要做的是:按模式查找,然后进行第一次匹配。请自行处理错误

new_name = re.findall(pattern, path)[0]  + "txt" 
输出:

321428.txt
此外,如果您想获取点之前的所有数字,只需将图案更改为:

pattern = r"\D(\d+\.)"
你说你想保留这些数字,但是你用re.sub做的是替换这些数字。您要做的是:按模式查找,然后进行第一次匹配。请自行处理错误

new_name = re.findall(pattern, path)[0]  + "txt" 
输出:

321428.txt
此外,如果您想获取点之前的所有数字,只需将图案更改为:

pattern = r"\D(\d+\.)"

请尝试。*?\d+\..*而不是..*贪婪地匹配。我仍然得到同样的结果。在上面,我想让新的弹出名为“321428.txt”@financial_mediator是您的预期输出321428,还是321428.txt?后者,但从下面的答案中很容易得到它们。出于好奇,r做什么?试试。*\d+\..*而不是..*贪婪地匹配。我仍然得到同样的结果。在上面,我想让新的弹出名为“321428.txt”@financial_mediator是您的预期输出321428,还是321428.txt?后者,但从下面的答案中很容易得到它们。出于好奇,r做什么?干净,我喜欢。非常感谢。干净,我喜欢。非常感谢。出于某种原因,当我运行你的时,我仍然会出错。蒂姆为我工作。我不知道为什么你的不适合我。它在regex101.com页面上看起来不错,因为某种原因,当我运行你的页面时,仍然会出现错误。蒂姆为我工作。我不知道为什么你的不适合我。在regex101.com页面上看起来不错谢谢!这让我了解了很多谢谢你!这让我了解了很多