【问题标题】:Regular expression python 4 integers followed by a space正则表达式python 4个整数后跟一个空格
【发布时间】:2018-09-16 04:39:29
【问题描述】:

每次在 ht efile 中的一行上正好有 4 个整数后跟一个空格时,我都会尝试拆分一个文件。我想我快到了(查看所有问题和示例)。认为我需要最后一击。谁能帮帮我。

脚本拆分所有以 4 个整数开头的行。仅当它只有 4 个整数且不超过 4 个时才需要拆分。

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

试试 1

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

试试 2

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

试试 3

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

200123242151111231                                 bla             bla                                       bla
200123331231231441                                 bla             bla                                       bla

【问题讨论】:

  • 测试文件里有什么?什么结果为您提供了当前的解决方案?这些结果有什么问题?
  • 它还会拆分不应拆分的行
  • python 4,这样的点击诱饵哈哈:D
  • 您使用的文件有多大?
  • 请向我们展示一些示例输入和输出。

标签: python regex


【解决方案1】:
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 位数字开头,则第一部分将为空。

【讨论】:

  • 好吧,这很有意义。它仍然会返回许多开头具有大整数的行。它似乎没有将空间作为一个因素,\s。我的代码现在看起来像这样: for x in re.split(r"[0-9]{4}\s", file.read()): print (x) for x in file.read().split( re.match(r"[0-9]{4}\s", file.read())): print (x)
  • 您的代码是我的想法,但我现在意识到我回答得有点仓促,因为我认为我不太了解您要做什么,因此我要求提供示例输入并输出。
【解决方案2】:

您使用readline 读取文件,它会逐行读取,在换行符处分割文件。

如果文件不是很大,可以一次读取,例如

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

(见this answer

然后应用正则表达式。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多