如何区分AAA:BBB和AAA:BBB:CCC使用正则表达式?

时间:2013-03-27 17:55:44

标签: c++ regex boost

说有字符串

A:B:C A:B C:B C:D:E C:D:E:F

我想将所有匹配模式“X:Y”的子字符串替换为“X:0:Y”,在本例中,它应该是:

A:B:C A:0:B C:0:B C:D:E C:D:E:F

是否可以使用一次正则表达式替换?

1 个答案:

答案 0 :(得分:3)

替换:

(^|\s)(.):(.)(?=\s|$)

\1\2:0:\3

^|\s - 白色空间线的开始 . - 外卡 : - 冒号
. - 外卡 \s|$ - 白色空间或行尾
?=是前瞻性的,否则A:B C:D将不会匹配。

\1 - 您放在括号中的第一件事的匹配字符串 - (^|\s)
\2 - 您放在括号中的第二件事的匹配字符串 - 第一(.)
\3 - 您放在括号中的第三件事的匹配字符串 - 第二(.)

\1等的常见替代方法是$1等。

您也可以使用\w(单词字符)代替.作为示例。

修改

从问题标题看,您可能希望匹配一个或多个(+)字符:

(^|\s)(\w+):(\w+)(?=\s|$)

编辑2:修正了正则表达式使用预测。

Boost test