我是regexp新手,我需要一些帮助 . 我有代表表格的文字 . 我知道它将由7列组成:
| int | int mixed with -. | unicode string with everything | float | float | int | float |
问题是浮点数是用千位之间的空格表示的(1234,43 => 1 234,43) . 此外,字符串可以包含空格并以数字结尾 . 我试过这样的事情(对于新行char的每一行条纹):
regex = re.compile(r"(\d+) ([\d.-]+) (.*) ([\d+ ]?\d+,\d+) ([\d+ ]?\d+,\d+) (\d+) ([\d+ ]?\d+,\d+)$", re.UNICODE)
w = regex.findall(line)
不幸的是,它并不适用于所有情况 . 一些测试数据:
49 602 DSKOD SMCX 262,59 1 131,30 1 1 131,30
49 602 DSKOD SMCX 3 5 262,59 1 131,30 1 1 131,30
50 61-201 łóćźż 1 2 669,50 334,75 1 334,75
51 1-214 AÓŻĆÓDS" 70,35 350,18 3 105,53
成千上万的案件有问题,因为我得到:
[]
[]
[(u'50', u'61-201', u'\u0142\xf3\u0107\u017a\u017c 1 2', u'669,50', u'334,75', u'1', u'334,75')]
[(u'51', u'1-214', u'A\xd3\u017b\u0106\xd3DS"', u'70,35', u'350,18', u'3', u'105,53')]
在第三个例子中,我希望字符串末尾的 2
位于下一列 . 你知道在Python 2.7上有一些线索如何正确匹配吗?我稍后会和这个unicode战斗 .
2 回答
问题是
[\d+ ]?
. 这匹配零或一个数字,加上空格 . OTHER问题是在列分隔符和字段内使用空格而没有某种引用,但这适用于您的数据 . 我还更改了第二列,它有一个额外的.
和第三列只能抓取非空格字符:输出:
我会打破这个:
更改是在unicode部分,不要太贪婪和避免空格,然后在浮动部分 . 它会有浮动没有逗号的问题 .
在你的第一行:
标有#的行!是我用来重复“\ d \ d \ d”模式的嵌套组产生的额外捕获 .
另一个样本: