我有一个由多行组成的字符串,其中包含纯数字和可能包含数字的单词,例如:
1 11 blabla12_ho5::blabla14_ho4
我想去掉单词,只留下纯数字,结果是:
1 11
我已经尝试使用正则表达式“ [^ ]*[^\d][^ ]*
”来捕捉单词并通过使用regsub
空字符串来删除它们。但它也捕获了第二个数字并返回:
1
什么是正确的正则表达式?
我有一个由多行组成的字符串,其中包含纯数字和可能包含数字的单词,例如:
1 11 blabla12_ho5::blabla14_ho4
我想去掉单词,只留下纯数字,结果是:
1 11
我已经尝试使用正则表达式“ [^ ]*[^\d][^ ]*
”来捕捉单词并通过使用regsub
空字符串来删除它们。但它也捕获了第二个数字并返回:
1
什么是正确的正则表达式?
字边界后跟一系列数字,然后是字边界:
\b(\d+)\b
你正在寻找的是更接近这个:
/\D(\d+)\D/g
捕捉数字和字母(不包括纯数字):\b(?!\d+\b)\w+\b
捕捉纯数字:\b(\d+)\b
不同的 RegEx 解析器将使用略有不同的语法。你想用这个正则表达式做什么?
您的问题的答案在于贪婪与惰性匹配。
这与您的问题有点相切,因为您在询问 RegEx,但是对于您正在做的事情,如果您只想获取前两列并且您使用的是 Linux,您可以做一些简单的事情,例如
cut -d ' ' -f 1-2 myfile.txt
你可以使用 grep:
echo "1 11 blabla12_ho5::blabla14_ho4" | grep -E -o "\b[[:digit:] ]+\b"
1 11
设法捕获包含特殊字符以及字母和数字的单词而不找到纯数字的正则表达式是:
\b[^ ]*[^\d ]+[^ ]*