首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写C++正则表达式,根据某些条件识别字符串中选定的浮点数或整型数?

如何编写C++正则表达式,根据某些条件识别字符串中选定的浮点数或整型数?
EN

Stack Overflow用户
提问于 2020-03-10 08:30:09
回答 1查看 50关注 0票数 1

堆栈溢出伙伴们,

下面是一个示例字符串:

代码语言:javascript
复制
"X1X: 7, Y1Y: 8.000, Z1Z:-8, W1W: -0.2"

我正在尝试使用C++中的正则表达式从变量X1X,Y1Y,Z1Z,W1W获得结果。

我尝试了:[+-]?[0-9]*[.][0-9]+,它不会从X1X给我INT7

我也尝试过:[-+]?[0-9]*[.]?[0-9]+,但它也会给我"X1X“、"Y1Y”、"Z1Z“和"W1W”中包含的“1”。

由于代码中函数的用途,我不想编写额外的行来过滤正则表达式的结果。我相信正则表达式可以超长和花哨地完成这项工作。有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 12:49:44

您可能根本不需要正则表达式,因为正则表达式将把这些数字捕获为字符串,然后您必须执行一个单独的步骤将字符串转换为数字。取而代之的是,你可以这样做:

代码语言:javascript
复制
char myString[] = "X1X: 7, Y1Y: 8.000, Z1Z:-8, W1W: -0.2";

int x1x, z1z;
float y1y, w1w;

std::sscanf(myString, "X1X: %d, Y1Y: %f, Z1Z: %d, W1W: %f", &x1x, &y1y, &z1z, &w1w);

如果你真的想做一个正则表达式捕获,你可以这样做:

代码语言:javascript
复制
std::string myString = "X1X: 7, Y1Y: 8.000, Z1Z:-8, W1W: -0.2";

std::regex regex(
  "X1X: ([+-]?[0-9]*), Y1Y: ([+-]?[0-9]*(?:\\.[0-9]*)?), Z1Z:([+-]?[0-9]*), W1W: ([+-]?[0-9]*(?:\\.[0-9]*)?)");

std::match_results<std::string::const_iterator> results;

bool success = std::regex_match(myString, results, regex);

这会通过results[4]将结果放入results[1]中。(当然,这需要与附加字符串中完全相同的间距,因此您可能希望在其中添加一些*s。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60610078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档