【问题标题】:Using regex to capture all instances of a particular character within another match使用正则表达式捕获另一个匹配中特定字符的所有实例
【发布时间】:2018-09-05 16:48:13
【问题描述】:

我有一些如下所示的文本:

"tbl_One"."Column Name A" AS "Column Name A",
"tbl_Two"."Column Name B" AS "Column Name B",
"tbl_Three"."Column Name C" AS "Column Name C",

我想选择 AS 之后的每一行中的所有空格,除了紧跟在 AS 之后的那个。

我一直在这个网站上做实验:https://regex101.com/

到目前为止,我已经想出了这个,它捕获了我真正想要搜索空格字符的每一行的部分:

/(?<=AS ).*(?=$)/gm

因此,例如,在第一行,它捕获:

"Column Name A",

我现在想告诉它“好的,丢弃除空格之外的所有字符”。

我怎样才能做到这一点?这将在 Notepad++ 中用于删除所有捕获的空格。

【问题讨论】:

  • 是否所有这些空格都会出现在紧跟在AS word 之后的双引号子字符串之间?
  • @WiktorStribiżew 这是 Notepad++ 使用的任何引擎,显然是“Boost”。我将使用 Notepad++ 的查找和替换来删除空格。
  • @WiktorStribiżew 是的,所有空格都将在 AS 字之后的双引号子字符串之间。
  • 最后检查:双引号子字符串中可以有引号吗?喜欢"Column ""here"""?抱歉,在发布解决方案之前需要仔细检查。
  • @WiktorStribiżew 不,不在我拥有的文件中。

标签: regex notepad++


【解决方案1】:

你可以使用

查找内容(?:\G(?!^)|\bAS\s+")[^\s"]*\K\h+
替换为&lt;empty string&gt;

regex demo

详情

  • (?:\G(?!^)|\bAS\s+") - 前一个成功匹配的结尾 (\G(?!^)) 或 (|) 单词 AS 作为一个完整单词(\b 是单词边界)后跟 1+ 个空格(可以替换\h+ 如果这里不能有换行符的话)
  • [^\s"]* - 除空格和 " 以外的任何 0+ 个字符
  • \K - 匹配重置运算符,将目前匹配的文本归零
  • \h+ - 1+ 水平空白字符。

Notepad++ 设置截图:

【讨论】:

  • 好的,太棒了。非常感谢!我将不得不研究它,看看我是否可以了解它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2019-07-24
  • 2019-11-18
  • 1970-01-01
  • 2015-02-25
相关资源
最近更新 更多