【问题标题】:Cut lines using Notepad++ Regexp replace使用 Notepad++ 正则表达式替换剪切线
【发布时间】:2016-10-06 14:33:17
【问题描述】:

我需要剪切包含 6 个或更多字符、连字符、然后是其他字符或符号的行。应删除连字符和其余行。原文:

0402CS-2
0402CS-3
0402
7812-C
0603CS-1
0603CS-2
0603CS-3

因此,我需要这个:

0402CS
0402CS
0402
7812-C
0603CS
0603CS
0603CS

为此,我使用 Notepad++ 正则表达式替换功能。查找模式:^([^\-]{6,})\-.+$ 替换模式:\1 但是没有“多行”选项,所以符号“^”和“$”不匹配仅行首和行尾,实际上我有结果:

0402CS
0402CS
0402
7812  <-- that's wrong!
0603CS
0603CS
0603CS

请告诉我如何修复查找模式?或者,也许还有其他一些功能强大的免费文本编辑器可以做到这一点?

【问题讨论】:

    标签: regex notepad++


    【解决方案1】:
    ^([^\n\-]{6,})\-.+$
    
        ^^
    

    只需使用\n,因为[^-] 正则表达式可以遍历到下面的行,因为使用该行进行匹配。

    查看演示。

    https://regex101.com/r/BHO93c/1

    对于输入

    0402 7812-C 正则表达式将两行都匹配为1 行并进行匹配。 如果0402 不存在,请查看演示。

    https://regex101.com/r/BHO93c/2

    【讨论】:

      【解决方案2】:

      这是因为 [^-] 字符类也匹配换行符。

      添加\n

      ^([^\n-]{6,})-.+$
      

      参见the regex online demo(注意m 多行修饰符(使^ 匹配行首,$ - 行尾)和g 修饰符(允许搜索多次出现) Notepad++ 中默认为 ON)。

      请注意,当字符类位于类的开头/结尾时,不需要在字符类中转义连字符,并且您永远不需要在字符类之外转义连字符。

      【讨论】:

      • 一切正常,非常感谢您的解决方案和有用的建议!
      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多