从字符串列表中提取工资
Extract salaries from a list of strings
我正在尝试从字符串列表中提取工资。
我正在使用正则表达式 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']
有人能帮忙吗?
谢谢
当您在模式中使用 re.findall 时,使用 re.findall 将为您提供捕获组,并且您正在使用一个几乎所有内容都是可选的组,从而在结果中为您提供空字符串。
在您的模式中,您使用 [0-9]*
匹配数字 0+ 次。如果前导数字没有限制,您可以使用 [0-9]+
而不是使其成为可选的。
您可以将此模式与捕获组一起使用:
(?<!\S)([0-9]+(?: [0-9]{1,3})?)€(?!\S)
说明
(?<!\S)
断言左边的不是非白色space字符
(
捕获组
[0-9]+(?: [0-9]{1,3})?
匹配 1+ 个数字,后跟匹配 space 和 1-3 个数字的可选部分
)
关闭捕获组
€
字面匹配
(?!\S)
断言右边不是非白色space字符
您的代码可能如下所示:
import re
sal= '41 000€ à 63 000€ / an' #this is a sample string for which i have errors
regex = '(?<!\S)([0-9]+(?: [0-9]{1,3})?)€(?!\S)'
print(re.findall(regex,sal)) # ['41 000', '63 000']
我正在尝试从字符串列表中提取工资。 我正在使用正则表达式 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']
有人能帮忙吗? 谢谢
当您在模式中使用 re.findall 时,使用 re.findall 将为您提供捕获组,并且您正在使用一个几乎所有内容都是可选的组,从而在结果中为您提供空字符串。
在您的模式中,您使用 [0-9]*
匹配数字 0+ 次。如果前导数字没有限制,您可以使用 [0-9]+
而不是使其成为可选的。
您可以将此模式与捕获组一起使用:
(?<!\S)([0-9]+(?: [0-9]{1,3})?)€(?!\S)
说明
(?<!\S)
断言左边的不是非白色space字符(
捕获组[0-9]+(?: [0-9]{1,3})?
匹配 1+ 个数字,后跟匹配 space 和 1-3 个数字的可选部分
)
关闭捕获组€
字面匹配(?!\S)
断言右边不是非白色space字符
您的代码可能如下所示:
import re
sal= '41 000€ à 63 000€ / an' #this is a sample string for which i have errors
regex = '(?<!\S)([0-9]+(?: [0-9]{1,3})?)€(?!\S)'
print(re.findall(regex,sal)) # ['41 000', '63 000']