Regex 使用哪个正则表达式只获取字符串中第一个出现的数字?
我有这样的评论表Regex 使用哪个正则表达式只获取字符串中第一个出现的数字?,regex,postgresql,Regex,Postgresql,我有这样的评论表 'Payment amount: 11000,50 from 144232' 'Payment amount: 13 450,20 from 144232' 有时数字中会出现空格,因为人们是手动输入的。我需要从示例中获得第一个数字,如11000,50和13450,20 我想用 regexp_replace('Payment amount:11000,20 from 144232','([a-zA-Z:\s]),''g')并获得结果'1100020144232',但我只需要'
'Payment amount: 11000,50 from 144232'
'Payment amount: 13 450,20 from 144232'
有时数字中会出现空格,因为人们是手动输入的。我需要从示例中获得第一个数字,如11000,50和13450,20
我想用
regexp_replace('Payment amount:11000,20 from 144232','([a-zA-Z:\s]),''g')
并获得结果'1100020144232'
,但我只需要'11000,00'
如何改进正则表达式或需要使用什么函数来获取这些数字?这适用于您的示例,无论是否使用小数:
^[a-zA-Z:\s]+([\d\s]*(,\d{1,2})?)
我会这样做:
SELECT (regexp_match(
'Payment amount: 11000,00 from 144232',
'[[:digit:]][[:digit:] ]*(?:,[[:digit:]]+)')
)[1];
regexp_match
--------------
11000,00
(1 row)
稍微简单但不太严格,
([+\-]?\d[\d,\.]+).
结果:11000.00获取字符串中的第一个数字,该数字后面有一个逗号和两个数字,由于键入,数字之间可能出现空格:
^[a-zA-Z:\s]*(\d[\s\d]*,\s*\d\s*\d)
解释
字符串的开头^
匹配字符类中列出的任何字符的0+倍[a-zA-Z:\s]*
Capture组1(这将包含值)(
匹配一个数字\d
匹配0+乘以空格字符或数字\d[\s\d]*
将一个逗号和两个数字与可选的空白字符匹配(如果后面不能有更多的单词字符,则添加,\s*\d\s*\d
)\M
关闭第1组)
更广泛的匹配可能是将除数字以外的任何字符的0+倍匹配
\D*
,而不是使用[A-zA-Z:\s]*
是否只提取该值?在COMMASOMETIME发生后,我需要获取第一个带两个数字的数字,第一个值如“11 000,00”,空格在百分之一百之间。我怎样才能解决这个案子?我改变了表达方式来解决这个问题。但是,不要期望任何像这样的表达式总是神奇地对任意数据做正确的事情。
^[a-zA-Z:\s]*(\d[\s\d]*,\s*\d\s*\d)