增强正则表达式捕获组并替换

时间:2018-09-18 09:53:26

标签: c++ regex boost

我正在尝试使用Boost扩展CamelCase字符串:CamelCase >> Camel Case

string Utils::ExpandCamelCase(string & str)
{
    static boost::regex camelCaseExpandRegex = boost::regex(R"(\B[A-Z]+?(?=[A-Z][^A-Z])|\B[A-Z]+?(?=[^A-Z]))");
    string result = boost::regex_replace(str, camelCaseExpandRegex, "  $1");
    return result;
}

如您所见,我正在尝试捕获第一个组,该组应该是每个单词的大写字母(不包括第一个),并用一个空格加上该组代替。

由于“ ExpandCamelCasePlease”变为“扩展ase租赁”,所以出现了错误。

尝试变化我怀疑我没有像应该那样捕获该小组。

我需要进行哪些更改以正确扩展驼峰式大写字母之前的空格?

2 个答案:

答案 0 :(得分:1)

尝试一下

string Utils::ExpandCamelCase(string & str)
{
static boost::regex camelCaseExpandRegex = boost::regex(R"([A-Z][^ ]+?)(?=[A-Z]|$)");
string result = boost::regex_replace(str, camelCaseExpandRegex, "  $1");
return result;

}

Regex

答案 1 :(得分:1)

只需使用(?<=[a-z])(?=[A-Z])

它使用(?<=[a-z])后向后看,以查看后面是否是小写字母,并向前看((?=[A-Z])),以查看是否在大写字母后面。

然后只需将其替换为空格

Demo