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