正则表达式python 4整数后跟一个空格

时间:2018-04-06 07:49:23

标签: python regex

我试图在每次正好有4个整数后跟ht efile中的一行空格分割文件。我想我几乎就在那里(看所有问题和例子)。我想我需要最后一次推动。任何人都可以帮助我。

脚本会拆分以4个整数开头的所有行。它只需要在只有4个整数时分割,而不是超过4个。

dat.vector

尝试1

import re
file = open('test.txt', 'r')

尝试2

for x in file.read().split(re.match(r"[0-9]{4}\s", file.readline())):
       print (x)

尝试3

for x in file.read().split(re.match(r"[0-9][0-9][0-9][0-9]\s", file.readline())):
       print (x)

示例输入

for x in re.split(r"[0-9]{4}\s", file.read()):
    print (x)

希望输出的是上面分组的内容:

1020                                                                                                                                                                                                                                                            
200123242151111231                                 bla             bla                                       bla
200123331231231441                                 bla             bla                                       bla
1030
200123242151111231                                 bla             bla                                       bla
200123331231231441                                 bla             bla                                       bla

200123242151111231                                 bla             bla                                       bla
200123331231231441                                 bla             bla                                       bla

2 个答案:

答案 0 :(得分:3)

re.match(r"[0-9]{4}\s", file.readline())

这将读取文件的一行并将正则表达式与其匹配。然后.split(...)使用该结果作为静态分隔符来分割整个文件。这与你想要达到的目标无关。

(它实际上甚至没有这样做,因为整个文件已被阅读,但这不是重点)

也许您正在考虑做.split(re.compile(...))这样的事情?在任何情况下都不起作用,str.split不会处理正则表达式。

尝试re.split(r"\b[0-9]{4}\s+", file.read())将文件拆分为由4位数字分隔的片段。 \b表示字边界'并防止它分裂4个数字,这只是较长数字的末尾。请注意,如果您的文件以4位数字开头,则第一部分将为空。

答案 1 :(得分:0)

您使用readline读取文件,它逐行读取,在换行符上拆分文件。

如果文件不是很大,您可以立即阅读,例如

with open(file_path, 'r') as file:
    content = file.read()

(见this answer

然后应用正则表达式。