多次替换后在 "file" 的开头和结尾添加常量

Add constants to start and end of "file" after multiple replacements

我已经找到了如何进行多次替换,但是替换

(from1)|(from2).....

(?1to1)(?2to2)

例如,如果我有:

hello all! I think saying hello to all is a nice way to introduce oneself.

我替换了

(hello)|(all)

(?1greetings)(?2everyone)

我明白了

greetings everyone! I think saying greetings to everyone is a nice way to introduce oneself.

现在,我想在文件的开头和结尾添加一个字符串 - 而不是每一行。所以,在那种情况下,我想要的结果是:

StartOfAllgreetings everyone! I think saying greetings to everyone is a nice way to introduce oneself.EndOfAll

你能帮我解决这个问题吗?我尝试失败的事情包括使用 $,\z,\Z 来标识行尾,以及使用像这样的分支重置组 (?|(hello)|(all))*

使用

查找内容:(^)(?<!(?s:.))|(hello)|(all)|($)(?!(?s:.))
或者用 . 匹配换行符 ON: (^)(?<!.)|(hello)|(all)|($)(?!.)
替换为:(?1StartOfAll)(?2greetings)(?3everyone)(?4EndOfAll)

注意:为了在另一个备选方案也匹配文件末尾时也处理文件末尾匹配,您需要添加可选组并在替换模式也是:

查找内容(?s)(^)(?<!.)|(hello)(?:($)(?!.))?|(all)(?:($)(?!.))?|($)(?!.)
替换为(?1StartOfAll)(?2greetings)(?3EndOfAll)(?4everyone)(?5EndOfAll)(?6EndOfAll)

现在,(?:($)(?!.))? 可选的非捕获组确保对文件末尾位置进行额外捕获,这就是替换模式中有额外 (?nEndOfAll) 的原因。

详情

(^)(?<!(?s:.))|(hello)|(all)|($)(?!(?s:.))有四个选项,你感兴趣的是

  • (^)(?<!(?s:.)) - 第一个备选方案和文件的开头与 ^ 匹配(并捕获到第 1 组),它前面没有任何字符(确保有负向回顾 (?<!.) - 添加内联修饰符组以确保无论额外的正则表达式 Notepad++ 设置如何,正则表达式都能正常工作)
  • ($)(?!(?s:.)) - 匹配(并捕获到第 4 组)后面没有任何字符的行尾(请参阅 (?!(?s:.)) 负先行)。

设置和演示: