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,5013450,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)
解释

  • ^
    字符串的开头
  • [a-zA-Z:\s]*
    匹配字符类中列出的任何字符的0+倍
  • Capture组1(这将包含值)
    • \d
      匹配一个数字
    • \d[\s\d]*
      匹配0+乘以空格字符或数字
    • ,\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)