从我的代码中,应该很容易看到我要做什么
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
可以在这里正常工作。
import re
string = '''
some_folder/asdf321428.txt
8.txt
some_folder123/asdf321428.txt
'''
expression = r'(?m)(\S*?)(\d*)\.txt'
print(re.findall(expression, string))
[('some_folder/asdf', '321428'), ('', '8'), ('some_folder123/asdf', '321428')]
[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些示例输入匹配。
这里是re.sub
解决方案,也使用字符串拆分。我们可以在分隔符/
上分割输入路径,然后使用最后一个元素来获取数字。我们再次调用re.sub
,以隔离出现在点之前的数字。
path = "some_folder/asdf321428.txt"
nums = re.sub(r'^.*?(\d+)\.\w+$', '\\1', path.split("/")[-1])
print(nums)
此打印:
321428