正则表达式 – 将所有文本组与gVim一起替换
请考虑以下数据:
Class Gender Condition Tenis A Male Fail Fail 33 A Female Fail NotFail 23 S Male Yellow 14 BC Male Happy Elephant 44 我有一个逗号分隔值与未格式化的列表(它在标签和空格之间变化). 在一个特定的专栏中,我有复合词,我想消除空间.在上面的例子中,我想用“Fail_”替换“Fail”,用“Happy_”替换“Happy”. 结果如下: Class Gender Condition Tenis A Male Fail_Fail 33 A Female Fail_NotFail 23 S Male Yellow 14 BC Male Happy_Elephant 44 我已经设法分两步完成: :%s/Fail /Fail_/g :%s/Happy /Happy_/g 问题:由于我对gVim很新,我试图一起实现这些替换,但我找不到如何做到这一点*. 完成此步骤后,我将使用以下内容将数据制成表格: :%s/s+/,/g 并获得最终结果: Number,Gender,Condition,Tenis A,Male,Fail_Fail,33 A,Female,Fail_NotFail,23 S,Yellow,14 BC,Happy_Elephant,44 ?在SO,我搜索[vim]:%s两个是:问题和一些变化,但我找不到相关的线程,所以我想我缺乏正确的术语. 编辑:这是实际数据(超过100万行).问题从第12列开始(例如“失败种植”应为“Fail_Planting”). SP1 51F001 3 1 1 2 3 2001 52 52 H Normal 17,20000076 23,39999962 NULL NULL SP1 51F001 3 1 1 2 3 2001 53 53 F Fail Planting 0 0 NULL NULL SP1 51F001 3 1 1 2 3 2001 54 54 N Normal 13,89999962 0 NULL NULL 解决方法
您可以在替换的右侧使用表达式.
:%s/(Fail|Happy) |s+/= submatch(0) =~# '^s+$' ? ',' : submatch(1).'_'/g 因此,这会找到Fail或Happy或whitespace,然后转换检查以查看匹配的部分是否完全是空白.如果它不使用捕获的部分并附加下划线,则用逗号替换它. submatch(0)是整个匹配,submatch(1)是第一个捕获组. 看看:h sub-replace-expression.如果你想做一些非常复杂的定义,你可以定义一个函数. 非常神奇的版本 :%s/v(Fail|Happy) |s+/= submatch(0) =~# '^vs+$' ? ',' : submatch(1).'_'/g (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- objective-c – 声明并访问BOOL类方法
- c# – 我可以在Entity Framework中的IDbCommandInterceptor
- c# – 当xml在字符串变量中时如何加载XDocument?
- vb.net CPU & RAM 显示程序
- systemctl介绍
- OOD三个设计原则:SRP(单一职责原则)、OCP(开闭原则)、LSP(
- Monodevelop 2.8,XCode 3.2.6,Interface Builder:Outlets和
- ruby-on-rails – 在开发模式下,Rails3不会在lib中重新加载
- actionscript 3.0编程问题
- 深入理解ajax系列第三篇——响应解码