正则表达式找到数字

问题描述 投票:-1回答:1

我正在尝试提取嵌入在文本中的6位数字。数字始终以零开头,总是6位数字,以第4位后面的句点分隔,如下所示:

0 0133.02[text] in location [texttext](text) numbers 1 0121.08[text] in location [texttext](text) numbers ...

我执行以下操作:

import re filtered = re.findall("0\d\d\d[.]\d\d", str(df['col']))

有478行要解析,每行包含所述数字。然而,即使我更改正则表达式格式,filtered结果也只输出60。有趣的是,filtered似乎主要由478行的第一行和最后几行的数字组成,但不是来自中间?

编辑:我提取了工作与不工作的行,发现那些工作的行是第一行和最后30行(0-29,448-477)。

以下是不起作用的行的示例(446,447): 446 0005.00 [CT] in Vancouver [CMA] (B.C.) 44160 447 0170.05 [CT] in Vancouver [CMA] (B.C.) 44006

并且有效的行样本(448,449): 448 0050.04 [CT] in Vancouver [CMA] (B.C.) 43995 449 0067.01 [CT] in Vancouver [CMA] (B.C.) 43989

python regex csv
1个回答
1
投票

这些是帮助您解决这个问题的一些方法。我将删除它,因为它不是一个答案。

import re
import pandas as pd

data = dict(col=['texttexttext 0036.01 texttext','texttexttext 0006.21 texttext'])
df = pd.DataFrame(data)

re.findall("0\d{3}\.\d{2}", str(df['col'])) #Simplified your regex

有效地创造:

['0036.01', '0006.21']

尝试这个怎么样:

re.findall("0\d{3}\.\d{2}",' '.join(df['col'].tolist()))

如果中间行不起作用,请提取样本,例如,并与我们分享:

print('\n'.join(df['col'][200:220].tolist()))
© www.soinside.com 2019 - 2024. All rights reserved.