我正在寻找一个正则表达式来改变像
这样的东西a = bb cc + 2 + (5 ^ 2 )
到
a=bb cc+2+(5^2)
(注意b和c不会一起被吹走)
想法是删除运算符周围的空格,而不是变量之间的空格。
我正在尝试使用带有c ++的stl,所以我会这样做:
std::wstring trimmed = std::regex_replace(resolvedExpression,
std::wregex(regexSolution), L"", std::regex_constants::match_default);
答案 0 :(得分:2)
你可以使用这样的模式:
s/\s*([+\-=*^%()?:<>+\/.,])\s*/\1/g
这将做的是匹配任何一侧被零或多个空格包围的运算符,然后用所讨论的运算符替换整个字符串。 g
修饰符使其成为全局(对整个字符串进行操作,而不仅仅是第一次匹配)。
使用标准库的C ++代码看起来像这样:
std::wstring cleanExpression(std::wstring expression) {
return std::regex_replace(
expression,
std::wregex(L"\\s*([+\\-=*^%()?:<>+/.,])\\s*"),
L"$1"
);
}
请注意,这(很明显)要求C ++编译器对std::regex
提供适当的支持,并在版本4.9.0中添加到gcc
。但不确定其他编译器。
答案 1 :(得分:0)