大家好
我正在编写一个python脚本来解析正好包含两列整数(空格或制表符分隔)的文本文件,类似于以下示例:
3141 5926
535 89
79 32
11 2
1 4
如果一个文件不遵循这个约定(例如一行中有1个或3个或更多的值,字母…),我希望能够从一开始就拒绝它
到目前为止,我想出了
^\d+[ \t]+\d+$
这可以说是不多的(我尝试了不同的方法,但没有用,不幸的是,我对regex不太熟悉)。我正在考虑编写一个表达式,如果文件不符合约定,它要么返回匹配项,要么不返回
我的问题是:
我正在使用re
开发python3
任何指点都很感激
您可以使用} 的数据帧中,然后检查所有值是否为整数,以及2中的列数是否为:
pandas
将文本文件加载到带有^{如何仅读取最后一段取决于文件的结构,如果第二段始终是第四行,您可以使用
df[3:]
访问它。如果没有模式,您可以这样提取第二段:我设法做到了我最初打算做的事情
我使用了以下模式:
\n*(?:(?:[ \t]*\d+[ \t]+\d+[ \t]*\n)*(?:[ \t]*\d+[ \t]+\d+[ \t]*)\n\n)*(?P<last>(?:[ \t]*\d+[ \t]+\d+[ \t]*\n)*(?:[ \t]*\d+[ \t]+\d+[ \t\n]*))
它匹配包含由空格或制表符分隔的整数对(每行一对)的文本。该模式还允许成对组之间有一条白线(如我的示例中所示)。它还捕获名为
last
的组中的最后一组对现在,这将匹配一个部分兼容的文件,这是我不想要的。诀窍是使用
re.fullmatch()
而不是re.match()
。如果只有部分匹配,则此方法返回None
上述模式执行以下操作:
\n*
与前导换行符匹配李>(?:(?:[ \t]*\d+[ \t]+\d+[ \t]*\n)*(?:[ \t]*\d+[ \t]+\d+[ \t]*)\n\n)*
与除最后一组对之外的所有对匹配(因此末尾的*
):(?:[ \t]*\d+[ \t]+\d+[ \t]*\n)*
使用单行对或整数在0到无限次之间进行匹配,允许前导和尾随空格/制表符(?:[ \t]*\d+[ \t]+\d+[ \t]*)\n\n
与一组对的最后一行正好匹配一次。这实际上是上述重复模式的基本情况李>(?P<last>(?:[ \t]*\d+[ \t]+\d+[ \t]*\n)*(?:[ \t]*\d+[ \t]+\d+[ \t]*))
遵循上面讨论的相同原理,将其作为最后一个重复非捕获组的基本情况。它允许无限量的尾随行\n*
与尾部换行符匹配李>相关问题 更多 >
编程相关推荐