我有这样的输入(在名为mylist
的列表中):
Encontrados 2 Inmuebles. Página 1 de 1
Encontrados 1 Inmuebles. Página 1 de 1
Encontrados 0 Inmuebles.
Encontrados 1.931 Inmuebles. Página 1 de 129
Encontrados 12 Inmuebles. Página 1 de 1
我想将每行的第一次出现提取为双位数0-99。所需的输出是:
[' 2 ', ' 1 ', ' 0 ', ' 12 ']
我不希望第4行匹配,因为有两个以上的数字(西班牙语中小数点是逗号,千位分隔符是点)
我的aproach就是这种模式( \d{1,2} )
,mask = re.compile(' \d+ ')
然后我用[(mask.search(item)).group(0) for item in mylist]
但我得到的输出是:
[' 2 ', ' 1 ', ' 0 ', ' 1 ', ' 12 ']
我相信这是因为Encontrados 1.931 Inmuebles. Página 1 de 129
字符串中第一次出现的是'Página'字后面的'1'。但我可以自己解决这个问题。
答案 0 :(得分:2)
(?!)
指定数字后面不应有小数点,如下所示:
\d{1,2}(?!\.)
然而这仍然会与Página之后的数字相匹配。所以你可能想要更具体:
( \d{1,2}(?! de |\.) )
根据示例,这否定了在比赛结束后出现的“de”一词。
答案 1 :(得分:2)
在我看来,你可以使用这样的东西:
mask = re.compile('^Encontrados (\d{1,2}) ')
然后使用.group(1)
来获取数字。
否则,如果你想严格获得第一个数字,可能是这样的:
mask = re.compile('^\D* (\d{1,2}) ')