如何在Notepad++中替换两个字符之间的空格

9
我有一个问题,如何使用notepad ++正则表达式在[]字符之间替换空格为_。
示例:
sl.[Posting date]                       AS TIME, 
'0000-00-00'                            AS edate, 
sl.[Document No_], 
[Original Currency Factor]

结果

sl.[Posting_date]                       AS TIME, 
'0000-00-00'                            AS edate, 
sl.[Document_No_], 
[Original_Currency_Factor]
3个回答

23

查找内容:[.+(\s)+.+]

替换为:_

同时不要忘记在“搜索模式”部分中选择“正则表达式”单选按钮。

更新:

好的,我有一个解决方案,但它很笨拙:

你需要执行多次替换才能完成。

查找内容:(\[.*)\s(.*\])

替换为:\1_\2

使用全部替换重复操作,直到没有出现任何匹配项。


1
工作效果不好,将所有字符之间的空格替换掉 :) - Justin
\s 匹配所有空格字符,包括制表符,它们应该保持不变。 - Cool Soft

0

使用

正则表达式替换

(\[[^ ]*) +(.*\])

使用

$1_$2

如果你想用一个下划线替换多个空格字符

或者

正则表达式替换

(\[[^ ]*) (.*\])

使用

$1_$2

如果您想将每个空格字符替换为单个 _


0

如果要替换方括号中间的空格块,可以使用

(?:\G(?!^(?<!.))|\[)[^][\s]*\K\s+(?=[^][]*])

并且还有一个额外的解决方案,用于替换圆括号/括号之间的空格:

(?:\G(?!^(?<!.))|\()[^()\s]*\K\s+(?=[^()]*\))

_或其他字符替换。 注意: 必须启用.匹配换行符选项。或者,在正则表达式前加上(?s)(?s)(?:\G(?!^(?<!.))|\[)[^][\s]*\K\s+(?=[^][]*])

细节:

  • (?:\G(?!^(?<!.)|\[) - 上一个成功匹配的结尾 (请参见 \G(?!^(?<!.), \G 匹配 文件开头或上一个匹配的结尾,这就是为什么加入 (?!^(?<!.) 负向 前瞻,以排除文件开头的位置,确保当前位置不是一行开头,左侧没有更多字符) 或 (|) 字符[ (\[)
  • [^][\s]* - 除了 ][ 和空格之外的零个或多个字符
  • \K - 匹配重置运算符,从整体匹配内存缓冲区中丢弃到目前为止匹配的所有文本
  • \s+ - 一个或多个空格(注意,如果要将每个空格分别替换为_,请删除+)
  • (?=[^][]*]) - 一个正前瞻,要求在当前位置的右侧立即有零个或多个不是[]的字符,然后是]

查看演示截图和设置:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接