永发信息网

C++正则表达式 匹配多段字符串并输出

答案:2  悬赏:0  手机版
解决时间 2021-03-27 12:09
C++正则表达式 匹配多段字符串并输出
最佳答案
正则表达式:
(北京时间.*?分).*?发生(.*?级地震).*?(震中距.*?公里)
是这个意思么?
代码:
using System.Text.RegularExpressions;

string text = "北京时间2013年4月20日8时02分四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震。震源深度13公里。震中距成都约100公里。";
string pat = "(北京时间.*?分).*?发生(.*?级地震).*?(震中距.*?公里)";
Regex regex = new Regex(pat);
MatchCollection mc = regex.Matches(text);

foreach (Match m in mc)
{
for (int i = 0; i < m.Groups.Count; i++)
{
Console.WriteLine(m.Groups[i].Value);
}
}

//注:Groups[0]的值是整个匹配的字符串,Groups[1]--Groups[3]的值就是正则表达式中匹配的三个括号里的内容,就是你的问题中的那三个字符串。
输出:
Groups[0]=北京时间2013年4月20日8时02分四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震。震源深度13公里。震中距成都约100公里
Groups[1]=北京时间2013年4月20日8时02分
Groups[2]=7.0级地震
Groups[3]=震中距成都约100公里追问多谢大神!但是这个代码跟我写的差别比较大,我用的是BOOSt库中的正则表达式,你的方法是可行的。
但是我用多个表达式+多个“boost::regex_search(text,m, reg2)”也实现了。
再加一个问题吧追答不要使用:

fin >> in;
使用:
fin.read(...);

例如:

const int bufsize = 1024;
char buf[bufsize+1] = {0};
fin.read(buf, bufsize);
cout << buf;
这段代码假设文件内容长度不会超过1024,如果文件内容的长度未知,可以使用:while (!fin.eof())进行多次read,拼接成一个string。

根据你给出的文字,正则表达式相应修改为:

(北京.*?时间.*?分).*?发生(.*?级.*?地震).*?(震.*?公里)
全部回答
去看正则表达式的语法吧追问这不是语法能解决的问题好不好,语法还不简单,照着看什么文字不能匹配呀,正则表达式还好,要求也不高,就是程序怎么写追答boost里面有API
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我是入手苹果6s呢还是荣耀play呢,各位
如何防止室外阀门锈死
定型水那种超级硬
什么人可以学习小儿推拿?
冉闵皇帝是冉姓皇帝
单选题西北地区和黄河中下游地区的晋、冀、豫
如何测出如图一小块干燥砖块的体积和质量?(
3M94底涂剂的反应原理是什么?
历史上真的有霍萧霖吗
98个0.25相乘在乘以96个4等 于
刚才看到有个小学生说她D罩杯了,怎么样?
汗蒸后能冲澡么?
开家中小型的摄影工作室要多少启动资金
2016湛江传销拉人理由
女子进屋调查却被恶棍迷昏,其真实身份竟是神
推荐资讯
原装正品ZIPPO侧面都有两个凹槽?
单选题Ihavemanynewfriendshere,________a
高淳话是不是世界非物质文化遗产?
定标后几天发出招标通知书
什么是塔器照明管
为什么我使卡盟刷会员会显示存在被盗风险
法国五大河流是哪五大?
8.76减去8.76除以1.2加2.8简便计算有没有
新的鼠标在电脑不匹配咋办
五笔打字键盘指法口诀
(甲数-乙数)除以5.4=1,甲数*0.5=8.6甲数*乙数
日版的苹果6p和中国的苹果6p什么差别
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?