ST3正则表达式查找未被其他字符包围的数字序列

时间:2017-02-11 03:10:58

标签: regex sublimetext3 plaintext

原谅可能的问题,因为我在制定自己的正则表达方面相当新,以及我提出的任何事情,我在过去一小时内已经这样做了。

我有一个巨大的文本文件,我在Sublime Text 3中使用过。我试图在ST的搜索和替换功能中使用正则表达式来识别所有2- 未被任何其他字符包围的4位数序列

这将识别以下序列:

01
330
0302

忽略以下内容:

1
10405
3042-2
(3030
x5590

在我的文档的上下文中,没有被任何其他字符包围的序列本质上意味着存在于它自己的行上。

换句话说,如果一个2-4位的序列存在于它自己的行上,则需要识别它。如果没有,或者它是< 2或> 5位数,则需要保持不变。

到目前为止,我能够提出的最好的是:

\b\n[0-9]{2,4}\n\b

...它可以很好地识别这些序列,但实际上似乎不允许我替换已识别的区域:单击替换或按下快捷键 Ctrl + Shift + H 似乎只是突出显示序列,然后继续前进。如果 我正在使用的正则表达式出现问题,我还能使用其他什么?

1 个答案:

答案 0 :(得分:1)

我不太清楚你在问什么,但是如果你想在一条线上自己匹配2-4位数,那就应该这样做

^[0-9]{2,4}$

^匹配行的开头,$匹配结束

如果要允许前导或尾随空格,可以执行此操作

^[ ]*[0-9]{2,4}[ ]*$

您想用什么替换文字?如果您要删除匹配的文本和整行,则可以执行此操作

^[0-9]{2,4}$\n

这匹配整行,包括换行符。

或者,您可以使用括号

捕获匹配的文本
^([0-9]{2,4})$

并像这样替换

foo$1bar

$ 1是(...)中的任何内容。这会给你

foo01bar
foo330bar
foo0302bar

And ignore the following:

1
10405
3042-2
(3030
x5590