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

时间:2018-04-04 14:31:52

标签: regex regex-negation regex-group

我试图找到文本中的所有数字,包括点或逗号的数字。但是我想避免单个数字出现在一个单词中,例如'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

我没有包含逗号,但我知道我需要输入[。,]而不是“\。”。

2 个答案:

答案 0 :(得分:2)

获取您的价值的可能性是与您不想要的相匹配,然后使用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*)?匹配一个或多个数字,后跟一个匹配点或逗号以及零个或多个数字的可选部分
  • )关闭捕获组

答案 1 :(得分:0)

\b\d[^A-Za-z]+|\d[^A-Za-z]+\b应该做的伎俩。这将检查单词分隔后跟数字和一系列非字母,或数字和一系列非字母后跟分词。它不会与双方都有字母的东西相匹配。