字符串截取我觉得每一个程序员无论是初学者還是高手都很了解了,像C 里的substr()方式就十分实用,可是这一方式必须了解你需要截取部位的初始部位和必须截取的字符串长短,又或是必须了解截取的初始部位和终止部位。
环境
上边说的substr方法在截取不确定性长短字符串和一次性截取多段子字符串时要起來没有很便捷。我就遇上这种的问题,下边来具体讲下:
现在有一串文件格式固定不动可是长短不确定性的字符串,例如:set(“
mill_ed.8.f_steptools.1.st_profile”, “face”, 50.800);那样一个字符串,他的构造是有周期性的,全是由“.”隔开。
如上,我需要截取标鲜红色的一部分,别的部位全是稳定的,依照传统方式我是可以先用“.”将字符串切分,随后还有一部分的再各自去截取。可是我嫌不便,因此我便想起了正则关系式,惦记着能否用正则去将我需要的标识符配对出去。
完成
立即上编码吧:
首先看下运作結果吧:
如何一次性将全部必须的子字符串所有截取出来,是否很省时省力呢?(大伙儿留意一下这儿,result器皿内的第一项是配对取得成功的整字符串,后边的才算是小括号中()配对标准的子字符串)。
详细说明
下面大家来了解一下C 正则的一些基本上使用方法吧。我们在用C 的正则的过程中必须引进regex库#include<regex>,这一库里边有什么物品呢?
这儿的函数公式和种类我不讲了,关键使用regex_match方式。随后将总体目标字符串与你得正则关系式去配对,获得的配对結果所有在smatch种类的玻璃容器中。在其中最后要的主要是regex正则关系式
regex pattern = regex(“set\\(“.*)\\.(\\d )\\.(.*)\\.(\\d )\\.st_profile”,.*”([a-z] )”,(.*)\\).*”);这儿是关键,这儿运用的正则专业知识实际上全是最主要的,并不是很繁杂,如果有不明白小伙伴们去看下正则有关的专业知识,正则是与计算机语言不相干的是实用的。大约讲一下这儿运用的好多个使用通配符的含意:(截屏由来菜鸟教程)
必须非常表明的就是你必须配对出的子字符串的关系式一定要用小括号“()”括起來,否则的话配对結果是不可能进到到smatch器皿里去的,大家认证一下,我将第一个子关系式的小括号“()”除掉大家看一下結果:regex pattern = regex(“set\\(“.*\\.(\\d )\\.(.*)\\.(\\d )\\.st_profile”,.*”([a-z] )”,(.*)\\).*”);
运作結果是:
大家见到結果与上一次比少了mill_ed这一项。
期待对各位有协助,假如大伙儿之后在解决字符串有这样的要求的情况下可以来尝试一下这类方式,我本人感觉用在一起是很省时省力的。最终给各位另附源码吧
#include <stdio.h> #include <iostream> #include <regex> using namespace std; int main() { string str(\"set(\"mill_ed.8.f_steptools.1.st_profile\",\"face\", 50.800);\"); regex pattern = regex(\"set\\(\"(.*)\\.(\\d )\\.(.*)\\.(\\d )\\.st_profile\",.*\"([a-z] )\",(.*)\\).*\"); smatch result ; bool isMatch = regex_match(str,result,pattern); for (int i = 0; i < result.size(); i ) { cout<<result[i]<<endl; } system(\"pause\"); return 0 ; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。