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页面上看起来不错谢谢!这让我了解了很多谢谢你!这让我了解了很多