替换两个字符串之间所有出现的字符

Replace all occurrences of a character between two strings

我想用 Notepad++ 在文本文档的所有行中用 _ 字符替换 string1string2 之间出现的所有 space 个字符。

示例:

string1 this is a first example string2
string1 this is a second example string2

预期结果:

string1_this_is_a_first_example_string2
string1_this_is_a_second_example_string2

我试过这个表达式(?<=string1)(\s*)(?=string2),但没用。

您可以使用

查找内容(?:\G(?!^)|string1)(?:(?!string1|string2).)*?\K\h(?=.*string2)
替换为_

参见regex demo

注意:

  • 如果您只需要匹配正则 space,请将 \h 替换为正则 space
  • 更合适的检查上一个成功匹配结束的方法是 \G(?!^(?<![\s\S])),但如果您预期的匹配在一行中,您可能会继续使用 \G(?!^).

详情

  • (?:\G(?!^)|string1) - 上一场比赛的结束(但不是一行的开始)或 string1
  • (?:(?!string1|string2).)*? - 任何字符,0 次或更多次,但尽可能少,即不开始 string1string2 字符序列
  • \K - 丢弃目前匹配的文本
  • \h - 任意水平白色space
  • (?=.*string2) - 在当前位置右侧的任何 0 个或多个字符之后必须有一个 string2,而不是换行符。