【问题标题】:How to use regular expression in multiple lines如何在多行中使用正则表达式
【发布时间】:2014-10-15 12:43:41
【问题描述】:

我有一个这样的 csv 文件:

XXXX,YYYYY,41.29942,2.19939,2013-05-21T10:22:35+0000
XXXX,YYYYY,41.2679,2.08318,2013-05-21T10:42:25+0000
XXXX,YYYYY,41.23117,1.99121,2013-05-21T11:03:39+0000
XXXX,YYYYY,41.15553,1.93085,2013-05-21T11:27:40+0000

我正在使用以下脚本

import re

ruta = 'C:\filename.csv'

with open(ruta,'r') as fh:
    lector = fh.read()
    pat = re.compile(r'^(XXXX,YYYYY,([0-9]{0,2}.[0-9]{0,7}),(-?)([0-9]{0,2}.[0-9]{0,7})),([0-9]{0,4}-[0-9]{0,2}-[0-9]{0,2}.[0-9]{0,2})T([0-9]{0,2}:[0-9]{0,2}:[0-9]{0,2})(\+0000)\n')
    res = re.findall(pat,lector)
print(res)

但只要找到第一组。 我知道我可以使用 csv 模块,但我认为按组处理更容易,因为有些行是纬度和经度位置。

我正在尝试searchfindallfinditer,但只返回第一行。

也许是关于多行的,但我无法理解。

【问题讨论】:

  • 您要求日期的日期部分以. 结尾,并且是可选的 1 位或 2 位数字。您在 T 之前的模式中使用了 .[0-9]{0,2}
  • 真的,正则表达式不是这里使用的工具。只需使用csv 模块。

标签: regex csv python-3.x


【解决方案1】:

如果不指定任何标志,默认情况下^ 匹配字符串的开头。

指定re.M flag(或re.MULTILINE)以在行首匹配它们。

pat = re.compile(r'^....', flags=re.M)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多