多次替换后在 "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:.))
负先行)。
设置和演示:
我已经找到了如何进行多次替换,但是替换
(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:.))
负先行)。
设置和演示: