【发布时间】:2019-08-26 01:17:13
【问题描述】:
我正在尝试从字符串列表中提取薪水。 我正在使用正则表达式 findall() 函数,但它返回了许多空字符串以及薪水,这导致我稍后在代码中出现问题。
sal= '41 000€ à 63 000€ / an' #this is a sample string for which i have errors
regex = ' ?([0-9]* ?[0-9]?[0-9]?[0-9]?)'#this is my regex
re.findall(regex,sal)[0]
#returns '41 000' as expected but:
re.findall(regex,sal)[1]
#returns: ''
#Desired result : '63 000'
#the whole list of matches is like this:
['41 000',
'',
'',
'',
'',
'',
'',
'63 000',
'',
'',
'',
'',
'',
'',
'',
'',
'']
# I would prefer ['41 000','63 000']
有人可以帮忙吗? 谢谢
【问题讨论】:
-
您的模式可以匹配一个空字符串,所以实际上是您要求的。您要匹配的模式是什么?以空格作为数字分组符号的数字?试试
r'(?<!\d)\d{1,3}(?: \d{3})*(?!\d)' -
你可以试试这个模式
(\d+(?: \d{1,3})?)€和 findall 只返回工资。 Demo -
np.concatenate(re.findall(regex,sal)[0],re.findall(regex,sal)[1])
-
是否只提取
€后面的数字?然后尝试r'(?<!\d)(\d{1,3}(?:[ \xA0]\d{3})*)\s*€',或r'(?<!\d)(\d+|\d{1,3}(?:[ \xA0]\d{3})*)\s*€'。见regex101.com/r/rwbpTx/1 -
谢谢大家!
标签: python regex string list findall