1

以下是 Python 片段

line = '3520005,"Toronto (Ont.)",C ,F,2503281,2481494,F,F,0.9,1040597,979330,630.1763,3972.4,1\r\n'我希望能够将第一个数字夹在两个逗号之间,在这种情况下是,2503281,

但是,我想出的似乎无法正常工作:m = re.search("\,([0-9])*\,",line)仅保留数字中的最后一位。

4

3 回答 3

3

星号需要放在括号内:

`",([0-9]*),"

否则,您只能捕获其中一个数字。您也不需要逗号前的反斜杠,但这没关系。

您可能还想使用+而不是*确保至少有一个数字,甚至使用{}.

于 2013-02-12T05:23:11.190 回答
3

这是一个非正则表达式解决方案:

>>> [item for item in line.split(',')[1:] if item.isdigit()][0]
'2503281'
于 2013-02-12T05:24:51.547 回答
0

请注意,使用正则表达式解析逗号分隔值充满了疏忽、脆弱性和潜在错误。如果您可以将其强制转换为 csv 模块可以执行的操作 - 您会过得更好。

也就是说,这有效:

import re

st='''line = '3520005,"Toronto (Ont.)",
C ,F,2503281,2481494,F,F,0.9,1040597,979330,630.1763,3972.4,1\r\n'''

print re.findall(r"(\d+\.?\d*)",st)

印刷:

['3520005', '2503281', '2481494', '0.9', '1040597', '979330', '630.1763', '3972.4', '1']

是正则表达式的解释。

于 2013-02-12T06:56:26.543 回答