如何创建一个捕获所有非纯数字的正则表达式

时间:2012-08-02 14:40:41

标签: regex

我有一个由许多行组成的字符串,其中包含纯数字和可能包含数字的单词,例如:

1 11 blabla12_ho5::blabla14_ho4

我想摆脱这些词,只留下纯数字,结果将是:

1 11

我已经尝试使用正则表达式“[^ ]*[^\d][^ ]*”来捕获单词并使用regsub将其删除为空字符串。但它也会捕获第二个数字并返回:

1

什么是正确的正则表达式?

7 个答案:

答案 0 :(得分:2)

单词边界后跟一系列数字后跟单词边界:

\b(\d+)\b

答案 1 :(得分:0)

您正在寻找的是更接近这一点:

/\D(\d+)\D/g

答案 2 :(得分:0)

捕捉号码和字母(不包括纯数字):\b(?!\d+\b)\w+\b
捕获纯数:\b(\d+)\b

答案 3 :(得分:0)

不同的RegEx解析器将使用稍微不同的语法。你试图用这个正则表达式做什么?

你的问题的答案在于贪婪与懒惰的匹配。

答案 4 :(得分:0)

由于你问的是RegEx的问题,这有点像你的问题,但是对于你正在做的事情,如果你想要做的只是前两列而你使用Linux,你可以做一些像

cut -d ' ' -f 1-2 myfile.txt

答案 5 :(得分:0)

你可以使用grep:

echo "1 11 blabla12_ho5::blabla14_ho4" | grep -E -o "\b[[:digit:] ]+\b"
1 11 

答案 6 :(得分:-1)

设法捕获包含特殊字符以及字母和数字但没有找到纯数字的单词的正则表达式是:

\b[^ ]*[^\d ]+[^ ]*