Notepad++ 删除括号之间的\s

Notepad++ Remove \s in between brackets

我正在尝试让 RegEx 工作,这将删除文本尖括号之间的所有空格。但我无法解决这个具体问题:

首先,这是我正在处理的正则表达式

([<].*\s[>])

方括号内是将被另一个程序读取的标签,因此不能有空格。这是一个例子

<tagname>foreign text with space that needs to stay like this</endtag>

虽然有时它们看起来有问题(标签之间有空格):

<ta gname>foreign text with space that needs to stay like this< /endtag>

我的表达式失败了,因为它将包括从第一个 < 到最后一个 > 的所有内容。我在考虑如何解决这个问题,我认为如果我删除所有与拉丁文本字符相邻的 \s(标签是文本中唯一的拉丁字符)就可以做到。 所以我想是这样的:

([<>]\s\?[A-Za-z]\s\?[<>])

并替换为

^\s

但显然没那么容易。

您可以使用以下基于正则表达式的搜索和替换:

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

并替换为空字符串。参见 regex demo online.

奖金相似模式 不同种类的括号:

  • 圆括号/圆括号(?:\G(?!^)|\()[^()\s]*\K\s++(?=[^()]*\)) (demo)
  • 方括号(?:\G(?!^)|\[)[^][\s]*\K\s++(?=[^][]*]) (demo)
  • 自定义不同的分隔符,比如说,|''|(?:\G(?!^)|\|')(?:(?!\|'|'\|).)*?\K\s++(?=(?:(?!\|'|'\|).)*'\|) (demo)

图案详情:

  • (?:\G(?!^)|<) - 上一个成功匹配的结束位置 (\G(?!^)) 或 < 符号
  • [^>\s]* - > 和空格
  • 以外的 0+ 个字符
  • \K - 忽略目前匹配的所有文本
  • \s++ - 1+ 个空格(为了更好的性能进行所有格匹配)
  • (?=[^>]*>) - 需要 0+ 个字符而不是 > 的检查,紧接着是 > 在 1+ 个空格之后。