当在模式中使用捕获组时,使用re.findall将为您提供捕获组,并且您正在使用的组中几乎所有内容都是可选的,从而在结果中提供空字符串。
在您的模式中,您将使用
[0-9]*匹配数字0+倍的数字。如果对前导数字没有限制,则可以改用
[0-9]+使其为可选。
您可以将此模式用于捕获组:
(?<!S)([0-9]+(?: [0-9]{1,3})?)€(?!S)正则表达式演示|
Python演示
说明
(?<!S)
断言左侧的字符不是非空格字符(
捕获组[0-9]+(?: [0-9]{1,3})?匹配1位以上的数字,后跟匹配空格和1-3位的可选部分
)
关闭捕获组€
逐字匹配(?!S)
断言右边的字符不是非空格字符
您的代码可能如下所示:
import resal= '41 000€ à 63 000€ / an' #this is a sample string for which i have errorsregex = '(?<!S)([0-9]+(?: [0-9]{1,3})?)€(?!S)'print(re.findall(regex,sal)) # ['41 000', '63 000']


