删除正则表达式中的空格

时间:2017-11-17 16:30:59

标签: python python-3.x

我正在学习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)

编辑:它们是序列号,是打字的,所以有时它们会出现“。”和“ - ”以及没有它们的其他时间。有时由于拼写错误而出现空格。

2 个答案:

答案 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查找字符串中的每个匹配项并将其返回到列表中。