我正在尝试使用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租赁”,所以出现了错误。
尝试变化我怀疑我没有像应该那样捕获该小组。
我需要进行哪些更改以正确扩展驼峰式大写字母之前的空格?
答案 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;
}
答案 1 :(得分:1)
只需使用(?<=[a-z])(?=[A-Z])
。
它使用(?<=[a-z])
后向后看,以查看后面是否是小写字母,并向前看((?=[A-Z])
),以查看是否在大写字母后面。
然后只需将其替换为空格。