正则表达式将所有过去的某个模式更改为大写

Arc*_*783 2 regex vim uppercase

我有一个xml文件,其值类似于

 JOBNAME="JBDSR14353_Some_other_Descriptor"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个将通过该文件并将引号中的所有字符更改为大写字母的表达式.是否有正则表达式将搜索JOBNAME ="引号内的任何内容"并将其更改为大写?或者一个命令,它将找到JOBNAME =并将该行的所有内容更改为大写字母?我知道可以只搜索JOBNAME =然后在vim中使用VU命令将行抛出到大写存储到宏并运行它,但我想知道是否有办法用正则表达式完成??

Zac*_*ach 8

您可以使用在:g与模式匹配的行上执行命令的命令:

:g/JOBNAME/norm! gU_
Run Code Online (Sandbox Code Playgroud)

这将执行gU_匹配的所有行上的大写所有字母的大写字母JOBNAME

如果在同一行上还有其他东西你不想大写,这里只有引号中的单词的解决方案:

:g/JOBNAME/norm! f"gU;
Run Code Online (Sandbox Code Playgroud)

f"转到下一个报价.gU利用动议资本化.使用的动作是;搜索下一个"(重复最后一个f命令).


Ing*_*kat 8

:substitute正如您原先打算的那样,这是一个替代方案.这比@Zach的解决方案效果更好,gU_当行中有其他文本时:

:%s/JOBNAME="[^"]\+"/\U&/g
Run Code Online (Sandbox Code Playgroud)
  • "[^"]\+" 匹配引用的文本(非贪婪地只匹配里面的非引号,以处理行中的多个引号)
  • \U 转动替换大写的剩余部分
  • 为简单起见,整个match(&)在这里是大写的,但是也可以使用捕获组(\(...\))或匹配限制\zs