我有一堆像以下一样的字符串:
"Hello, here's a test colon:. Here's a test semi-colon;"
我想替换它
"Hello, here's a test colon:. Here's a test semi-colon;"
等等所有可打印的ASCII值.
目前我正在使用boost::regex_search
匹配(\d+);
,在我依次处理每个匹配时构建一个字符串(包括追加自我找到的上一个匹配以来没有匹配的子字符串).
谁能想到更好的方法呢?我对非正则表达式方法持开放态度,但在这种情况下,正则表达式似乎是一种合理的方法.
谢谢,
大教堂
使用正则表达式的一大优势是处理棘手的情况,例如&
实体替换不是迭代的,这只是一个步骤.正则表达式也相当有效:两个主角是固定的,所以它会很快跳过任何不开头的东西.最后,正则表达式解决方案是未来维护者没有太多惊喜的解决方案.
我说正则表达式是正确的选择.
它是最好的正则表达式吗?你知道你需要两个数字,如果你有3个数字,第一个将是1.打印ASCII毕竟是 -~
.出于这个原因,你可以考虑?\d\d;
.
至于替换内容,我将使用为boost :: regex :: replace描述的基本算法:
For each match // Using regex_iterator<> Print the prefix of the match Remove the first 2 and last character of the match () lexical_cast the result to int, then truncate to char and append. Print the suffix of the last match.