0

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

1 11 blabla12_ho5::blabla14_ho4

我想去掉单词,只留下纯数字,结果是:

1 11

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

1

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

4

7 回答 7

2

字边界后跟一系列数字,然后是字边界:

\b(\d+)\b
于 2012-08-02T14:42:30.830 回答
0

你正在寻找的是更接近这个:

/\D(\d+)\D/g
于 2012-08-02T14:42:48.297 回答
0

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

于 2012-08-02T14:45:21.730 回答
0

不同的 RegEx 解析器将使用略有不同的语法。你想用这个正则表达式做什么?

您的问题的答案在于贪婪与惰性匹配。

于 2012-08-02T14:53:40.550 回答
0

这与您的问题有点相切,因为您在询问 RegEx,但是对于您正在做的事情,如果您只想获取前两列并且您使用的是 Linux,您可以做一些简单的事情,例如

cut -d ' ' -f 1-2 myfile.txt
于 2012-08-02T14:58:19.267 回答
0

你可以使用 grep:

echo "1 11 blabla12_ho5::blabla14_ho4" | grep -E -o "\b[[:digit:] ]+\b"
1 11 
于 2012-08-04T13:29:51.547 回答
-1

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

\b[^ ]*[^\d ]+[^ ]*
于 2012-08-04T12:32:13.130 回答