加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 将所有文本组与gVim一起替换

发布时间:2020-12-14 06:06:46 所属栏目:百科 来源:网络整理
导读:请考虑以下数据: Class Gender Condition TenisA Male Fail Fail 33A Female Fail NotFail 23S Male Yellow 14BC Male Happy Elephant 44 我有一个逗号分隔值与未格式化的列表(它在标签和空格之间变化). 在一个特定的专栏中,我有复合词,我想消除空间.在上面
请考虑以下数据:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读