我试图找到文本中的所有数字,包括点或逗号的数字。但是我想避免单个数字出现在一个单词中,例如'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
我没有包含逗号,但我知道我需要输入[。,]而不是“\。”。
答案 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
应该做的伎俩。这将检查单词分隔后跟数字和一系列非字母,或数字和一系列非字母后跟分词。它不会与双方都有字母的东西相匹配。