Regex RE2嵌套正则表达式组匹配
有一个RE2正则表达式,如下所示Regex RE2嵌套正则表达式组匹配,regex,Regex,有一个RE2正则表达式,如下所示 const re2::RE2 numRegex("(([0-9]+),)+([0-9])+"); std::string inputStr; inputStr="apple with make,up things $312,412,3.00"); RE2::Replace(&inputStr, numRegex, "$1$3"); cout<<inputStr;
const re2::RE2 numRegex("(([0-9]+),)+([0-9])+");
std::string inputStr;
inputStr="apple with make,up things $312,412,3.00");
RE2::Replace(&inputStr, numRegex, "$1$3");
cout<<inputStr;
const re2::re2 numRegex(([0-9]+),)+([0-9])+);
std::字符串inputStr;
inputStr=“苹果公司,制造物品$312412,3.00”);
RE2::替换(&inputStr,numRegex,“$1$3”);
cout基于RE2的解决方案
由于RE2不支持lookarounds,因此没有纯单通道正则表达式解决方案
您可以有一个解决方法(通常在没有可用解决方案时):用(\d)、(\d)
regex和$1$2
替换字符串两次:
const re2::re2 numRegex(R“(\d),(\d))”;
std::string inputStr(“苹果加化妆品,化妆品$312412,3.00”);
RE2::替换(&inputStr,numRegex,“$1$2”);
RE2::替换(&inputStr,numRegex,“$1$2”);// 基于RE2的解决方案
由于RE2不支持lookarounds,因此没有纯单通道正则表达式解决方案
您可以有一个解决方法(通常在没有可用解决方案时):用(\d)、(\d)
regex和$1$2
替换字符串两次:
const re2::re2 numRegex(R“(\d),(\d))”;
std::string inputStr(“苹果加化妆品,化妆品$312412,3.00”);
RE2::替换(&inputStr,numRegex,“$1$2”);
RE2::替换(&inputStr,numRegex,“$1$2”);// 在您尝试的模式中,您正在重复外部组([0-9]+),)+
,该组将包含上一次迭代的值,该值可以匹配1+位和逗号
最后一次迭代将捕获412、
和312,
将只匹配
您使用的是regex
,但是如果您有可用的boost,您可以使用\G
锚定,它可以获得在上一次匹配结束时声明位置的迭代匹配,并替换为空字符串
(?:\$|\G(?!^))\d+\K,(?=\d)
模式匹配:
(?:
非捕获组
\$
匹配$
|
或
\G(?!^)
在上一个匹配的末尾而不是开始处断言位置
)
关闭非捕获组
\d+\K
匹配1+个数字,然后忘记目前匹配的内容
,(?=\d)
匹配一个逗号并直接在右边断言一个数字
在您尝试的模式中,您正在重复外部组([0-9]+),)+
,该组将包含上一次迭代的值,该值可以匹配1+位和逗号
最后一次迭代将捕获412、
和312,
将只匹配
您使用的是regex
,但是如果您有可用的boost,您可以使用\G
锚定,它可以获得在上一次匹配结束时声明位置的迭代匹配,并替换为空字符串
(?:\$|\G(?!^))\d+\K,(?=\d)
模式匹配:
(?:
非捕获组
\$
匹配$
|
或
\G(?!^)
在上一个匹配的末尾而不是开始处断言位置
)
关闭非捕获组
\d+\K
匹配1+个数字,然后忘记目前匹配的内容
,(?=\d)
匹配一个逗号并直接在右边断言一个数字
对不起,我不太清楚你想要实现什么。您只是想从数字中删除逗号?我将匹配基于逗号的数字格式,然后进行第二次传递以删除数字。您正在重复一个捕获组,该捕获组将具有迭代的最后一个值。您只想删除数字之间的逗号。使用std::regex numRegex(R“(\d),(?=\d))”
和替换为$1
,regex_replace(inputStr,numRegex,“$1”)
。对不起,我不太清楚您想要实现什么。您只是想从数字中删除逗号?我将匹配基于逗号的数字格式,然后进行第二次传递以删除数字。您正在重复一个捕获组,该捕获组将具有迭代的最后一个值。您只想删除数字之间的逗号。使用std::regex numRegex(R“(\d),(?=\d))”代码>和替换为$1
,regex_替换(inputStr,numRegex,“$1”)
。感谢nit解决方案。由于我们需要使用RE2,它不支持前瞻。我为RE2添加了一个解决方案。感谢nit解决方案。由于我们需要使用RE2,它不支持前瞻。我为RE2添加了一个变通方法。
apple with make,up things $3124123.00