我正在学习python和英语。我有一个可能很容易的问题,但我无法解决它。我有一个.txt的文件夹,我能够通过正则表达式提取每个17个数字的序列。我需要用从.txt中提取的序列重命名每个文件
import os
import re
path_txt = (r'C:\Users\usuario\Desktop\files')
name_files = os.listdir(path_txt)
for TXT in name_files:
with open(path_txt + '\\' + TXT, "r") as content:
search = re.search(r'(\d{5}\.?\d{4}\.?\d{3}\.?\d{2}\.?\d{2}\-?\d)', content.read())
if search is not None:
print(search.group(0))
f = open(os.path.join( "Processes" , search.group(0) + ".txt"), "w")
for line in content:
print(line)
f.write(line)
f.close()
有.txt,其中序列在字符之间显示空格,而我的正则表达式找不到它们(例如:00372.2004 .442.02.00-1,00572.2008.872.02.00- 5)
编辑:它们是序列号,是打字的,所以有时它们会出现“。”和“ - ”以及没有它们的其他时间。有时由于拼写错误而出现空格。
答案 0 :(得分:0)
你想要这个正则表达式:
search = re.search(r'(\d{5}.*\d{4}.*\d{3}.*\d{2}.*\d{2}-.*\d)', content.read())
点。是任何角色。通过将\放在点前面你逃脱它并搜索点而不是任何字符。
答案 1 :(得分:0)
您可以在正则表达式中使用\D
来匹配任何非数字字符(包括空格)和+
以匹配一个或多个(或*
以匹配零或更多),所以你可以将表达式重写为:
pattern = r'(\d{5}\D+\d{4}\D+\d{3}\D+\d{2}\D+\d{2}\D+\d)'
re.findall(pattern, '00372.2004 .442.02.00-1, 00572.2008.872.02.00- 5')
# ['00372.2004 .442.02.00-1', '00572.2008.872.02.00- 5']
注意我使用re.findall
查找字符串中的每个匹配项并将其返回到列表中。