如何从匹配的字符串中删除字符?

如何从匹配的字符串中删除字符?

我想从电话号码列表中删除空格。电话号码的格式大部分为:“+33 x xx xx xx xx”(含引号)。空格可以以不同的方式放置。

在 notepad++ 中,我的“查找内容:”字段如下所示,并有效匹配遇到的每个电话号码:"\Q+\E[0-9 ]+"。但我不明白如何删除其中的一部分(空格)。

我考虑过分两步进行:首先选择具有上述匹配模式的搜索结果,然后勾选“在选择中”复选框进行替换,但我不知道如何一次选择所有搜索结果。

答案1

“简单”的方法是使用捕获组来表示每组数字。对于固定格式,这种方法效果很好。查找:

"\+33 ([0-9]) ([0-9]{2}) ([0-9]{2}) ([0-9]{2}) ([0-9]{2})"

并将其替换为:

"+33$1$2$3$4"

另一种方法更灵活一些,但同时可能会有点令人困惑,因为它使用\G不太常见的锚点和\K可能更不常见的锚点:

(?:"\+33|\G)[^\s"]*\K 

(末尾有一个空格)并且替换为无。

regex101 演示

(?:          # Begin group
  "\+33      # Match "+33
|            # OR
  (?!^)\G    # At the end of the previous match (and exclude start of lines)
)            # End group
[^\s"]*      # Any non-space or quote characters
\K           # Reset the match
             # Match a space

\G和在某些早期版本的 Notepad++ 上都不\K可用。我不记得它们是什么时候推出的,但它们在 v6.5.2 上可用。

相关内容