Python 使用正则表达式提取带点和逗号的数字

Python 使用正则表达式提取带点和逗号的数字,python,regex,string,python-2.7,extract,Python,Regex,String,Python 2.7,Extract,我已经阅读了很多页面,试图解释如何在Python中使用regex,但我还是一点也不懂。就连那个和那个也帮不了我。我还是有点困惑:P 我有以下字符串: string = "|C195|1|Base de Cálculo ST: 2.608,24 - Valor da ST: 163,66|" 我试图使用以下方法仅提取2.608,24和163,66: st_values = re.findall("\d+[,.]\d+", string) 但是,我的打印st_值的输出是: ['2.608','1

我已经阅读了很多页面,试图解释如何在Python中使用
regex
,但我还是一点也不懂。就连那个和那个也帮不了我。我还是有点困惑:P

我有以下字符串:

string = "|C195|1|Base de Cálculo ST: 2.608,24 - Valor da ST: 163,66|"
我试图使用以下方法仅提取
2.608,24
163,66

st_values = re.findall("\d+[,.]\d+", string)
但是,我的
打印st_值的输出是:

['2.608','163,66']
相反,我希望是这样

['2.608,24','163,66']
我不想要

['195', '1', '2.608,24','163,66']
那么,我如何使用正则表达式参数的字母汤以这种方式提取它们呢?

试试这个(这个正则表达式还假设像
1,23
这样的字符串是匹配的)

我建议:

\b\d{1,3}(?:\.\d{3})*,\d+\b
这是一个

这是一个:


如果要从最后第二列/字段中提取数字,可以执行以下操作:

 In: re.findall(r"[0-9,.]+",string.split('|')[-2])      
Out: ['2.608,24', '163,66']

否则,如果您只使用正则表达式,而其他列中有类似的数字,那么您就无法将它们过滤掉。

@Tushar-hmm为什么要这样做?它没有OP要求的逗号符号它完全符合我的数据。。真的谢谢@Kamehameha@Kamehameha,看看斯特里比雪夫在被接受的答案中的评论,也许它也会对你有所帮助。你的答案也符合我的数据,但由于他的方式“更干净”,我发现它更容易阅读和理解,但无论如何,谢谢@帕多迪多:但是如果你有
2.600.100,34
?有一个-它会失败<代码>\b
是单词边界。如果还希望匹配包含在单词字符中的数字,则可以删除它们。
import re
p = re.compile(r'\b\d{1,3}(?:\.\d{3})*,\d+\b')
test_str = "|C195|1|Base de Cálculo ST: 2.608,24 - Valor da ST: 2.608.234,24 12.608.234,24\n  163,66|\nd2.608.234,24\n2.60d8.23d4,24"
print(re.findall(p, test_str))
 In: re.findall(r"[0-9,.]+",string.split('|')[-2])      
Out: ['2.608,24', '163,66']