regex - 正则表达式在 VIM 中使用正则表达式交换两个文本
问题描述
不是正则表达式专家。但是,在网上搜索了一下之后,我想出了这个表达式来交换文件中的两个文本:
%s/(\s*\(&\)\(.*\), \(.*\)\s*);/( \3, \2 );/gc
我的初始文本:
read( ®Val.mAllBits, getAddr()+offset );
我想把它换成:
read( getAddr()+offset, regVal.mAllBits );
正如您在上面看到的,要求是:
- 忽略每个文本之间的可选空格
- 删除第一个文本前面的 & 。
我在开头和结尾都有 \s* 以忽略空白。但是,它的问题是,语句中右括号之前的空格被添加到匹配 3。因此我得到的结果为:
read( getAddr()+offset , regVal.mAllBits );
请注意 ',' 之前的额外空格。我尝试了很多东西,但无法解决它。谁能帮我忽略正则表达式语句中模式匹配中的空格?
解决方案
如果您不想匹配空格,则必须使用\S
not .
,因为.
将匹配任何字符,包括空格。正则表达式默认总是贪婪的,所以会尽可能匹配。
%s/(\s*\(&\)\(.*\), \(\S*\)\s*);/( \3, \2 );/gc
推荐阅读
- javascript - 用户单击文本字段时选择了不正确的时间
- testing - 在 JaCoCo 报告生成期间找不到 Kotlin 约定打包的源文件
- ionic-framework - button handler in Toast message Ionic 4 is not fired, why?
- c# - 是否可以分配像 Generic
generic = new Generic这样的泛型 (); - angular - 使用 angular + web api 创建和查看对象。前端结构
- android - 密钥库 getEntry 在 Android 9 上返回 NULL
- symfony - 在 Symfony 迁移类中,获取您在控制台迁移命令中输入的选项
- python - ValueError:无法将字符串转换为浮点数:'x'
- javascript - 从数组中删除多个对象并返回更新的数组
- javascript - chrome扩展弹出窗口关闭后怎么办?