我有这个字符串: -
ABCDE /东西:XYZ = 0,JKLM = 0 / SOMETHING东西:some_value
什么是正则表达式,只有第一个冒号(:)被替换为下划线(_)?
答案 0 :(得分:1)
只匹配两个组 - 第一组是第一个冒号之前的所有内容;第二,一切都在它之后。然后只需重新构建带有下划线的字符串。
s/([^:]*):(.*)/\1_\2/
根据您使用的语言/正则表达式引擎,您需要进行不同的转义。
答案 1 :(得分:1)
你可以使用负面的lookbehind在正则表达式中进行,但效率相对较低:
(?<!:.*):
如果先前没有其他冒号匹配,则只匹配冒号。
但是,由于你只是替换一个字符,而不是一个字符模式,我建议使用该语言的原生“替换”功能。您将获得更好的性能和可读性。
答案 2 :(得分:1)
在标准系统中,您只需编写:
s/:/_/
要实现全局替换(用下划线替换每个冒号实例),您需要在替换后添加限定符(通常为“g”)。
不同的语言对正则表达式使用不同的符号,因此详细的答案取决于目标语言。但是,我写的内容是'sed','ed','vi','vim'和Perl。
答案 3 :(得分:0)
如果您使用的是* nix且拥有sed
$ echo "ABCDE/Something something:XYZ=0, JKLM=0/SOMETHING Something:some_value" | sed 's/:/_/'
ABCDE/Something something_XYZ=0, JKLM=0/SOMETHING Something:some_value
另外,如果你使用bash作为你的shell
$ var="ABCDE/Something something:XYZ=0, JKLM=0/SOMETHING Something:some_value"
$ echo ${var/:/_}
ABCDE/Something something_XYZ=0, JKLM=0/SOMETHING Something:some_value