简单的正则表达式 - 双引号之间用下划线替换空格并使所有字母小写

Tom*_*zko 3 regex vim

你能帮我用正则表达式来改变行吗

<string name="Final time">Final time</string>
<string name="After extra time">After extra time</string>
Run Code Online (Sandbox Code Playgroud)

到行

<string name="final_time">Final time</string>
<string name="after_extra_time">After extra time</string>
Run Code Online (Sandbox Code Playgroud)

因此,双引号之间用下划线替换空格并使所有字母小写。

我将在 VIM 中使用这个正则表达式进行搜索/替换。

Tom*_*lak 5

通用方法:

:%s/\(<string name="\)\(\u\)\([^" ]\+\) \([^" ]\+\)/\1\l\2\e\3_\4/
Run Code Online (Sandbox Code Playgroud)

这将替换每个字符串@name

  • 以大写字符 ( \u) 开头并且
  • 由两个空格分隔的单词 ( \([^" ]\+\) \([^" ]\+\)) 和
  • 将其替换为相应的小写字符 ( \l\2\e)。
  • 它还用下划线替换空格。

要使 @name 中的所有内容都小写,可以简化:

:%s/\(<string name="\)\([^" ]\+\) \([^" ]\+\)/\1\l\2_\3_\e/
Run Code Online (Sandbox Code Playgroud)

要消除多个空格,请执行两个步骤。首先,将属性值设置为小写:

:%s/\(<string name="\)\([^"]\+\)/\1\l\2\e/
Run Code Online (Sandbox Code Playgroud)

然后,将属性值中的每个空格替换为下划线

:%s/\(<string name="[^"]*\)\@<= /_/g
Run Code Online (Sandbox Code Playgroud)

请注意,这\@<=是 vim 表达肯定的后视断言的方式。