我需要一个正则表达式,只有当字母不是前面的字母时才会得到数字。数字正则表达式,如果之前没有字母
DoThis(0.5) // = 0.5 should be selected
DoThis5(43) // = 43 should be selected, but not 5
我设法写这/[0-9.]+\b/g
但它会从DoThis5()
选择“5”。这是我不想要的。
我需要一个正则表达式,只有当字母不是前面的字母时才会得到数字。数字正则表达式,如果之前没有字母
DoThis(0.5) // = 0.5 should be selected
DoThis5(43) // = 43 should be selected, but not 5
我设法写这/[0-9.]+\b/g
但它会从DoThis5()
选择“5”。这是我不想要的。
如果你有\b
运营商可用,你为什么不做\b[0-9.]+
(加号是贪婪的,所以会吃掉它找到的所有数字)。
编辑:用零或一个点和至少一个数字的十进制数更严格的正则表达式;
\b[0-9]+(\.[0-9]+)?
目前不支持10.和.5。它需要一个支持分组括号的正则表达式引擎,以及可选部分的问号。 (sed
的一些旧版本,例如Emacs要求你反斜杠括号和问号。)
使用负回顾后灌胃你使用正则表达式引擎支持它:
(?<!\w)[0-9.]+\b
您必须避开点,否则所有字符都有效 –
不正确。在一个字符类中,点只匹配它自己。 – tripleee
它看起来不像它支持我。但那真的会派上用场。哪些引擎确实支持“后视”? – cnotethegr8
如何:
/\([0-9.]+\)/
这将匹配的()
如果之间封闭的数字你不会使用负面看,这将工作:
/\([0-9.]+\)/
echo "DoThis5(43)" | egrep -o "\([0-9.]+\)"
(43)
即使它与字母相邻,它仍然会抓取任何数字。 – tripleee
@tripleee,不,它匹配括号内的数字。 –
你worng的tripleee .....看看我修改的答案 – ennuikiller
试试这个:
/[^\w]([\d\.]+)/
解释:
每个字符不是单词字符(如[^a-zA-Z]
)
[\d\.]
每个数字(如[0-9]
)和点字符(逃脱)
如果数字在行首,这将失败,但在这种情况下,这可能不是问题。 – tripleee
@tripleee - 你是对的。这是一个问题。 – cnotethegr8
这应该允许输入开头的数字也匹配:'(?:^ | [^ \ w])([\ d。] +)'? _(注意,不要在char类中跳过!)_ –
btw,这里的所有(当前)答案都会匹配'............' - 哪个我上次检查时不是数字。 ;)如果这很重要,请使用'\ d +(?:\。\ d +)?'而不是'[\ d。] +'或'[0-9。] +'部分。 –
@彼得 - 它的重要性。我想要 '。'只有在数字之前。我想出了这个'(\ b [0-9] +)|([。])+(\ d +)'但是我用正则表达式不好。有没有更好的方法来写这个? – cnotethegr8