正则表达式:替换字符串中第一次出现的字符

时间:2010-07-20 03:57:09

标签: regex

我有这个字符串: -

ABCDE /东西:XYZ = 0,JKLM = 0 / SOMETHING东西:some_value

什么是正则表达式,只有第一个冒号(:)被替换为下划线(_)?

4 个答案:

答案 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