正则表达式查找文本中分组为多个的所有数字组

regex to find all digits groups, that are grouped as more than one, inside a text

我正在尝试查找文本中的所有数字,很多数字带有点或逗号。但是我想避免单个数字出现在一个单词中,例如 'hou2se',但是任何超过一个数字的情况都应该是有效的。现在我有以下正则表达式:

'(\d+\.?\d*)'

这符合我的要求,我不知道如何避免该特定模式。 我试过这样的事情:

'(\d+\.?\d*)(?![A-Za-z]\d[A-Za-z])'

但是没用。例如,我怎样才能避免找到 'hou2se'? 注意:我想避免创建一个被字母包围的数字。

编辑:一些例子:

"5.5asd" = match 5.5
"asd1.3 " = match 1.3
"5,2" = match 5,2 
"asd 5,4 asd 2.2 as5d" = match 5,4 and 2.2
"asd 45. mms555as 4545 sas 5book" = match 45. 555 4545 5

我没有包含逗号,但我知道我需要用 [.,] 代替“\.”。

获得你的价值观的一种可能性是匹配你不想要的东西,然后使用 alternation:

在一个组中捕获你想要的东西

\b(?:[a-zA-Z_]+\d[a-zA-Z_]+)\b|(\d+(?:[.,]\d*)?)

您的值将在捕获组 1 中

将匹配:

  • \b 字边界
  • (?:非捕获组
    • [a-zA-Z_]+\d[a-zA-Z_]+ 在一个或多个单词字符之间匹配一个数字 \d [a-zA-Z_]+(没有数字)
  • )关闭非捕获组
  • \b字边界
  • |
  • ( 捕获组
    • \d+(?:[.,]\d*)? 匹配一个或多个数字后跟一个可选部分,该部分匹配一个点或逗号以及零个或多个数字
  • ) 关闭捕获组

\b\d[^A-Za-z]+|\d[^A-Za-z]+\b 应该可以解决问题。这将检查是否有一个分词符后跟一个数字和一系列 non-letters,或者一个数字和一系列 non-letters 后跟一个分词符。它不会匹配任何两边都有字母的东西。