栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Qt 正则表达式findAll函数的实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt 正则表达式findAll函数的实现

文章目录
  • 前言
  • 一、在python中的写法
  • 二、在Qt5中的写法
    • 1.引入库
    • 2.编写类似re.findall的函数
  • 总结


前言

在工作中,遇到一个应用场景,需要在一个字符串中,提取出符合某些条件的字符串,功能类似于python中的re.findall函数功能.


提示:Qt5的正则表达式貌似不支持正则中的问号"?",只能通过调用函数QRegExp::setMinimal(bool) 设置贪婪和非贪婪,这一点非常坑,这会导致在一些工具网站上测试通过的正则表达式,但是在qt上是不能使用的,需要尤为注意

一、在python中的写法

在python 中是使用(.*?) 中的问号,进行正则匹配中贪婪模式/非贪婪模式的区分,因此在python中这样编写:

import re
 
line = "\u001B[01;31m250EthernetTRDPTest-2CCU.tar.gz     \u001B[01;31m250EthernetTRDPTest-2CCU.tar.gz    \u001B[01;31m250EthernetTRDPTest_CCU.tar.gz "
# .* 表示任意匹配除换行符(n、r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
tempList = re.findall( r"u001B[[0-9]+;[0-9]+m(.*?)[ ]+", line)
print(tempList)
#['250EthernetTRDPTest-2CCU.tar.gz', '250EthernetTRDPTest-2CCU.tar.gz', '250EthernetTRDPTest_CCU.tar.gz']
二、在Qt5中的写法 1.引入库

代码如下(示例):

#include 
#include 
#include 
#include 
2.编写类似re.findall的函数

代码如下:

QList findAll(QString pattern,QString str,bool noGreedy){
//    QRegExp rxlen("u001B[[0-9]+;[0-9]+m(.*)[ ]+");//构造 QRegExp 对象
    QRegExp rxlen(pattern);//构造 QRegExp 对象
    rxlen.setMinimal(noGreedy); //非贪婪模式匹配,True:非贪婪,False:贪婪
    int position = 0;  //匹配的位置
    QList strList;
    while (position >= 0) {
        position = rxlen.indexIn(str,position); // 从str中匹配对应的字符串,从position 这个位置开始匹配
        if(position < 0) // 未成功匹配,直接退出
            break;
        strList << rxlen.cap(1);//得到匹配的字符串,,cap(index),index = 0是整个字符串;当 index >= 1 得到的是 QRegExp 中小括号中匹配的字符串
        position += rxlen.matchedLength(); // 刷新匹配的位置
    }
    return strList;
}

函数调用如下


QString pattern = "u001B[[0-9]+;[0-9]+m(.*)[ ]+";
QString str = "\u001B[01;31m250EthernetTRDPTest-2CCU.tar.gz     \u001B[01;31m250EthernetTRDPTest-2CCU.tar.gz    \u001B[01;31m250EthernetTRDPTest_CCU.tar.gz "
qDebug()< 
总结 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号