如何在捕获组内替换

时间:2016-01-24 07:18:00

标签: regex sublimetext

我正在修改现有的HTML文档。我正在做一些事情,比如添加一个目录等。

我有一个带有此ID的标题:id="transcending intellectual limitations"(真实!)

我希望能够找到整个ID,然后用连字符替换空格。

如果我只有ID,但我不想删除整个文档中的所有空格,那将很简单。

我是正则表达式的新手,我正在使用Sublime的查找和替换来执行此操作。

2 个答案:

答案 0 :(得分:4)

您可以使用

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

并替换为您需要用空格替换空格。

(?:\bid="|(?!^)\G)模式设置初始边界:id="或上次成功匹配的结束。该模式提供了具有两个备选方案的交替列表。 \b匹配单词边界,以便将id="作为整个单词进行匹配。 \G运算符在字符串的开头和ech成功匹配之后匹配。要排除起始位置,会添加一个负(?!^)前瞻(后面没有字符串起始位置)。 "Where You Left Off: The \G Assertion"中详细了解\G

[^\s"]*匹配除空格和引号之外的零个或多个字符。

\K运算符使正则表达式引擎省略了匹配缓冲区到目前为止匹配的所有文本。

\s+最终匹配一个或多个将被替换的空格。

Regex101 Demo

答案 1 :(得分:1)

这是使用Ruby作为正则表达式解析器的2遍解决方案:

#!/usr/bin/env ruby

line = 'yadayadayadaid="transcending intellectual limitations"yadayadayada'
line =~ /id="(.*)"/
part = $1.gsub( /\s+/, '-' )
print part

的产率:

transcending-intellectual-limitations

请注意,这将替换第二遍中单词之间的所有空格。