我想在 Linux 终端中使用 egrep
找到所有分隔的单词(这意味着两个空格之间的字符),它们是十进制数字,包括加号和减号。
我的解决方案:
(?<= |\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
最佳答案
egrep
不支持环视断言。但是,GNU grep 使用 -P
开关提供与 perl 兼容的正则表达式:
grep -oP '(?<=\s|^)[+-]?[0-9]+(?=\s|$)' input
请注意,您可以将 |\n|\t
简化为 \s
,它代表 whitespace character。为了匹配行首开始的数字和行尾结束的数字,我添加了 ^
和 $
作为 的替代项\s
.
关于regex - 在 Linux 终端中使用带有 egrep 的正则表达式查找数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802409/