我想查找所有分隔的单词(表示两个空格之间的字符),即使用egrep
的Linux终端中的十进制数字,包括加号和减号。
我的解决方案:
(?<= |\n|\t)[\+\-]?[0-9]+(?= |\n|\t)
说明:
(?<= |\n|\t)
检查十进制数字(?= |\n|\t)
检查十进制数后是否有空格或换行符或制表符。这个代码在我测试实现的程序Kiki 0.5.6中运行良好,但是如果我将它复制到终端,则它不起作用。我认为终端无法识别特殊的括号结构(?=
或?<=)
。我对吗?我该如何申请终端?
例如:我的文字:
1.fasfa
123asfavdsvdas156
1safsavdsvsd1sdva5s31as35d1va
595s6dva2sdvas9
asd9as5dv92s
sd559vs fs5s94 4dfs dfa4s44 459 9dasf 8sdfa 5sfa
napr. uNIveRziTA
sfaf 2262 2226 56565 adss
uNiVerZita
uNIVERZITa
123
123 sadasf 123456 sfafs 134
-1234- -25- -5- 5- --55
-
-55
123 100 999 124 6262 62 6 2 62 62 65 26565 22 62 62652 +665 +0649 ---662 265 959 595 099 199 -059 -0245 -444
--1245 -555-5-55 --555- 555-
+25
-55
+++55 +5 ++5 ++55+665+
samo samo samo samo otec otec skola skola samo lamo samo lamo
re20. (?<=(\t|\n| ))([+-])?[1-9][0-9]*(?= |$|\n)
--- ---
doma doma doma doma doma doma doma doma doma
meno.priezvisko@tuke.sk meno.priezvisko.1@tuke.sk meno.priezvisko@student.tuke.sk meno.priezvisko.2@student.tuke.sk
23:56:59.555
00:00:00.000
23:59:59.999
31/12/2099
00/12/2054
01/01/2000
匹配:
459
2262
2226
56565
123
123
123456
134
-55
123
100
999
124
6262
62
6
2
62
65
26565
22
62
62652
+655
+0649
答案 0 :(得分:1)
egrep
不支持环绕声断言。但是,GNU grep带有使用-P
开关的perl兼容正则表达式:
grep -oP '(?<=\s|^)[+-]?[0-9]+(?=\s|$)' input
请注意,您可以将|\n|\t
简化为代表空白字符的\s
。为了匹配从行首开始的数字和结束于行尾的数字,我添加了^
和$
作为\s
的替代。< / p>