在 VIM 中使用正则表达式交换两个文本的正则表达式
Regex to swap two texts using regex in VIM
不是正则表达式专家。但是,在网上搜索了一下之后,我想到了这个表达式来交换文件中的两个文本:
%s/(\s*\(&\)\(.*\), \(.*\)\s*);/( , );/gc
我的初始文字:
read( ®Val.mAllBits, getAddr()+offset );
我想把它换成:
read( getAddr()+offset, regVal.mAllBits );
如上所示,要求是:
- 忽略每个文本之间的可选白色 spaces
- 删除第一个文本前面的 &。
我在开头和结尾都有\s*来忽略白色space。但是,它的问题是,语句中右括号之前的白色 space 被添加到匹配 3 中。因此我得到的结果是:
read( getAddr()+offset , regVal.mAllBits );
请注意“,”前多出来的白色 space。我尝试了很多东西,但无法解决。
谁能帮我忽略正则表达式语句中模式匹配中的白色space?
如果你不想匹配空格,你必须使用\S
而不是.
,因为.
会匹配任何字符,包括空格。正则表达式默认总是贪心的,所以会尽可能匹配。
%s/(\s*\(&\)\(.*\), \(\S*\)\s*);/( , );/gc
不是正则表达式专家。但是,在网上搜索了一下之后,我想到了这个表达式来交换文件中的两个文本:
%s/(\s*\(&\)\(.*\), \(.*\)\s*);/( , );/gc
我的初始文字:
read( ®Val.mAllBits, getAddr()+offset );
我想把它换成:
read( getAddr()+offset, regVal.mAllBits );
如上所示,要求是:
- 忽略每个文本之间的可选白色 spaces
- 删除第一个文本前面的 &。
我在开头和结尾都有\s*来忽略白色space。但是,它的问题是,语句中右括号之前的白色 space 被添加到匹配 3 中。因此我得到的结果是:
read( getAddr()+offset , regVal.mAllBits );
请注意“,”前多出来的白色 space。我尝试了很多东西,但无法解决。 谁能帮我忽略正则表达式语句中模式匹配中的白色space?
如果你不想匹配空格,你必须使用\S
而不是.
,因为.
会匹配任何字符,包括空格。正则表达式默认总是贪心的,所以会尽可能匹配。
%s/(\s*\(&\)\(.*\), \(\S*\)\s*);/( , );/gc