Regex 如果尚未在vim中替换,则将%替换为\%
我有一些文本,其中有些是Regex 如果尚未在vim中替换,则将%替换为\%,regex,vim,Regex,Vim,我有一些文本,其中有些是%,有些是\%。我想将所有出现的%替换为\%,而不将\%转换为\\%。我试过: %s/\\\@!%/\\%/g 但它不起作用 示例文本可以是: This % and this % should be replaced but not these two: \% and \%. 谢谢您的帮助。Vim支持负面外观落后,如下所示: :s/\(\\\)\@<!%/\\%/g :s/\(\\\)\@ 具体如下: s/#替换。。。 \(#启动第1组 \\#反斜杠 \)#终
%
,有些是\%
。我想将所有出现的%
替换为\%
,而不将\%转换为\\%
。我试过:
%s/\\\@!%/\\%/g
但它不起作用
示例文本可以是:
This % and this % should be replaced but not these two: \% and \%.
谢谢您的帮助。Vim支持负面外观落后,如下所示:
:s/\(\\\)\@<!%/\\%/g
:s/\(\\\)\@
具体如下:
s/#替换。。。
\(#启动第1组
\\#反斜杠
\)#终端组1
\@
您也可以执行:s/%/\\%/g
,然后执行:s/\\\\%/\\\\%/g
Vim支持负片向后看,如下所示:
:s/\(\\\)\@<!%/\\%/g
:s/\(\\\)\@
具体如下:
s/#替换。。。
\(#启动第1组
\\#反斜杠
\)#终端组1
\@
您还可以从控制台执行:s/%/\\%/g
,然后执行:s/\\\\%/\\\%/g
回显替换%和%,但不是\%和\%|sed-es/%/\\\%/g
给予
替换%和%,但不替换\%和\%
希望这就是你要找的。如果是这样,只需使用
cat FileName | sed-e s/%/\\\\%/g来自控制台
回显替换%和%,但不是\%和\%|sed-es/%/\\\%/g
给予
替换%和%,但不替换\%和\%
希望这就是你要找的。如果是这样,只需使用
cat FileName | sed-es/%/\\\\%/g我们可以在这里利用?
的贪婪性
:%s/\\\?%/\\%/g
\\\?
将匹配\
零次或一次。由于?
是贪婪的,如果\
存在,它将消耗
- 因此,实际上,
\%
和%
都将被\%
取代
我们可以在这里利用
?
的贪婪性
:%s/\\\?%/\\%/g
\\\?
将匹配\
零次或一次。由于?
是贪婪的,如果\
存在,它将消耗
- 因此,实际上,
\%
和%
都将被\%
取代
/(?应该可以工作,但我不知道vim支持正则表达式内部的“负查找”操作。它不工作:找不到模式:(?我知道vim
不支持它,但这是您需要的表达式。我不知道除了三次传递之外还有什么合理的替代方法:用一些其他垃圾替换\%
,用\%
替换%
,然后用\%
再次替换其他垃圾。两次传递的方法只是修复了错误的de>\\%
它生成的东西,将它们修补回单个。如果您遇到困难,您可以使用perl
使用该正则表达式处理此文件。是的:%s/\(\\\)\@可以工作。@/(?应该可以工作,但我不知道vim支持“反向查找”正则表达式内部的操作。它不工作:找不到模式:(?我知道vim
不支持它,但这是您需要的表达式。我不知道除了三次传递之外还有什么合理的替代方法:用一些其他垃圾替换\%
,用\%
替换%
,然后用\%
再次替换其他垃圾。两次传递的方法只是修复了错误的将其生成的内容删除>\\%
,并将其修补回单个。如果您遇到困难,可以使用该正则表达式使用perl
处理此文件。是的:%s/\(\\\)\@工作。@…这是默认的AFAIK。当然,但是如果你将set nomagic
添加到你的vimrc中,你仍然不想为无数中断的插件贡献力量。在你的模式开始时添加\m
要容易得多。类似的推理也适用于区分大小写。对。但这仍然是一个坏习惯。我不是无论如何,这里是“为一个插件做贡献”。我正在写一个正则表达式来执行搜索和替换操作。编写Vim插件的人应该a)注意可移植性问题,b)对Vim正则表达式非常了解,不会复制和使用一些SO问题中的随机表达式。不,但你正在教人们用Vim编写正则表达式。magic
是他们应该知道的……这是默认的AFAIK。当然,但如果你添加set nomagic
在你的vimrc中。在模式的开头添加\m
要容易得多。类似的推理也适用于区分大小写。对。但这仍然是一个坏习惯。无论如何,我不是在这里“贡献插件”。我正在写一个正则表达式来执行搜索和替换操作。编写Vim插件的人应该注意可移植性问题,b)非常了解Vim正则表达式,不会复制和使用一些SO问题中的随机表达式。不会,但你正在教人们用Vim编写正则表达式。magic
是他们应该知道的事情。可能你想用\\\%替换\\%,因为第一个反斜杠正在转义第二个,并且百分号没有任何符号。但是这只是一个猜测,因为作者没有对此发表任何评论。今天早上有一个正则表达式考虑到了这一点,但现在它已经消失了。好了,OP提到文本在描述中有%
和\%
。。但是,是的,如果\\%
应该被\\\%
替换,我的解决方案将不起作用……你是对的。它说不起作用关于这一点,到目前为止,这是最简单也是最好的解决方案。您可能想用\\\%替换\\%,因为第一个反斜杠正在转义第二个反斜杠,并且百分号没有任何符号。但这只是一个猜测,因为作者没有对此发表任何意见。今天早上有一个正则表达式考虑到了这一点,但是好了,OP提到文本在描述中有%
和\%
,但是是的,如果\\%
应该被替换的话