替换两个字符串之间所有出现的字符
Replace all occurrences of a character between two strings
我想用 Notepad++ 在文本文档的所有行中用 _
字符替换 string1
和 string2
之间出现的所有 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 次或更多次,但尽可能少,即不开始 string1
或 string2
字符序列
\K
- 丢弃目前匹配的文本
\h
- 任意水平白色space
(?=.*string2)
- 在当前位置右侧的任何 0 个或多个字符之后必须有一个 string2
,而不是换行符。
我想用 Notepad++ 在文本文档的所有行中用 _
字符替换 string1
和 string2
之间出现的所有 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 次或更多次,但尽可能少,即不开始string1
或string2
字符序列\K
- 丢弃目前匹配的文本\h
- 任意水平白色space(?=.*string2)
- 在当前位置右侧的任何 0 个或多个字符之后必须有一个string2
,而不是换行符。