【问题标题】:ST3 regex to find number sequences not surrounded by other charactersST3 正则表达式查找未被其他字符包围的数字序列
【发布时间】:2017-06-29 12:45:58
【问题描述】:

请原谅这个可能的问题,因为我对制定自己的正则表达式还很陌生,而且我想出的任何东西,我都在过去一个小时内完成了。

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

这将识别以下序列:

01
330
0302

并忽略以下内容:

1
10405
3042-2
(3030
x5590

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

也就是说,如果一个 2-4 位的序列存在于它自己的行上,则需要对其进行识别。如果不是,或者它是 5 位数字,则需要单独放置。

到目前为止,我能想到的最好的是:

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

...这对于识别这些序列足够好,但实际上似乎不允许我替换识别的区域:单击替换或按下快捷键Ctrl+Shift+H似乎只是突出了序列,然后继续。如果这我正在使用的正则表达式的问题,我还能使用什么?

【问题讨论】:

    标签: regex sublimetext3 plaintext


    【解决方案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
    

    【讨论】:

    • 我认为您可能稍微误解了我在示例中的要求,但没关系;这个答案是完美的。第一个正则表达式准确地回答了我的要求,而带有\n 的第二个正则表达式更进一步,为我节省了删除第一个解决方案(以及我自己的解决方案)留下的空白行的额外步骤。非常感谢。
    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2010-11-14
    • 2023-03-15
    • 2010-09-16
    相关资源
    最近更新 更多