在表达式中使用正则表达式删除空格

时间:2016-10-04 03:55:30

标签: regex stl

我正在寻找一个正则表达式来改变像

这样的东西
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);

2 个答案:

答案 0 :(得分:2)

你可以使用这样的模式:

s/\s*([+\-=*^%()?:<>+\/.,])\s*/\1/g

这将做的是匹配任何一侧被零或多个空格包围的运算符,然后用所讨论的运算符替换整个字符串。 g修饰符使其成为全局(对整个字符串进行操作,而不仅仅是第一次匹配)。

Demo on regexr

使用标准库的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)

尝试以下方法:

\s*([+\-=*]+)\s*

https://regex101.com/r/oU39fi/1