代码之家  ›  专栏  ›  技术社区  ›  StrikeAgainst

正则表达式在记事本中的backreference和literal之间添加了不需要的换行符++

  •  1
  • StrikeAgainst  · 技术社区  · 7 年前

    我有一个文本文件,其中包含由换行符分隔的元素列表,如下所示:

    alpha
    beta
    gamma
    ...
    

    我想把它转换成这样的格式:

    (alpha),
    (beta),
    (gamma),
    ...
    

    所以我在记事本++中使用以下正则表达式来替换这些行:

    Find: ([^\n]+)
    Replace: \($1\),
    

    但奇怪的是,现在输出中的每一行都有另一个换行符:

    (alpha
    ),
    (beta
    ),
    (gamma
    ),
    ...
    

    我不知道这是怎么发生的。当我单独使用 $1 \), 除了替换之外,它工作得很好,但每次我在反引用后面放一个文字,它就会在中间放一个换行符。我知道我以后可以用另一个正则表达式来解决这个问题,但有人能解释一下为什么会发生这种情况吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Wiktor Stribiżew    7 年前

    而不是 [^\n] (=除LF外的任何字符,换行, \n )你应该使用 . 只匹配任何字符 除换行符外 . 使用以下正则表达式匹配 非空 行:

    ^.+$
    

    替换为 \($0\) 哪里 $0 替换反引用(也称为占位符)代表整个匹配,括号被转义(因为括号是Boost替换模式中用于定义条件替换模式的特殊元字符)。

    m 此处的修饰符自 ^ $ 锚点匹配 线 分别地 默认情况下 在记事本++中。

    见核电站S&R设置:

    enter image description here