当前位置: 首页 > article >正文

【Qt】使用正则表达式,从输入字符串中提取所有符合特定始、末符号的字符串。

文章目录

  • 前言
  • 1. 简介
    • 先看函数原型
    • 解释
    • 头文件
  • 2. 实现

前言

本文代码测试环境:

编程语言构建套件IDE操作系统
C++ 11Desktop Qt 5.9.9 MSVC2017 64bitQt Creator 4.11.0Windows10

1. 简介

先看函数原型

/**
     * @brief ExtractString         提取特定范围内的字符串,结果使用引用返回
     * @param qstrInPut             原字符串
     * @param qcStartChar           开始符号
     * @param qcEndChar             结束符号
     * @param qvOutPut              所有符合条件的字符串容器
     * @return                      成功返回 0,失败返回 1
     */
    int ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QVector<QString> &qvOutPut);

解释

本篇博客提供一个方法,从输入的字符串中提取所有符合特定始、末符号的字符串。(就是个轮子,直接用即可。)
这句话有点绕。直接举例:

样例1"shfldsjfk<String001>safdsf<String001>%&*^^*"
样例2"....(Valid characters)......$#&*^*&^#$^%$^*"

对于样例1,如果想提取“String001”和“String002”,形参 qcStartChar qcEndChar 分别传入 < >符号即可;
对于样例1,如果想提取“Valid characters”,形参 qcStartChar qcEndChar 分别传入 ( )符号即可。

输入字符串中其余的干扰字符会自动摒弃。

头文件

#include <QRegularExpression> 

2. 实现

int ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QVector<QString> &qvOutPut)
{
    // 清空输出容器
    qvOutPut.clear();

    // 检查输入字符串是否为空
    if (qstrInPut.isEmpty()) {
        return 1;  // 失败返回 1
    }

    // 构建正则表达式字符串
    QString regexStr = QRegularExpression::escape(qcStartChar) + "(.*?)" + QRegularExpression::escape(qcEndChar);

    // 创建正则表达式对象
    QRegularExpression regex(regexStr);

    // 检查正则表达式是否有效
    if (!regex.isValid()) {
        return 1;  // 失败返回 1
    }

    // 获取所有匹配的迭代器
    QRegularExpressionMatchIterator it = regex.globalMatch(qstrInPut);

    // 遍历所有匹配项
    while (it.hasNext()) {
        QRegularExpressionMatch match = it.next();
        // 将匹配的尖括号内的内容添加到结果列表
        qvOutPut.append(match.captured(1));
    }

    return 0;  // 成功返回 0
}

http://www.kler.cn/a/369432.html

相关文章:

  • 设计模式最佳实践代码总结 - 结构型设计模式篇 - 代理模式最佳实践
  • 【实用知识】Spring Boot 优雅捕捉异常的几种姿势
  • Vue笔记-element ui中关于table的前端分页
  • 活着就好20241028
  • 基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真
  • linux下gpio模拟spi三线时序
  • Python基础之正则表达式
  • 微服务网关之Gateway
  • LSTM(Long Short-Term Memory,长短期记忆网络)在高端局效果如何
  • 完全了解一个asp.net core MVC项目模板
  • Ubuntu如何创建一个子用户并赋与管理员权限
  • tomcat多实例
  • 关于注解@ComponentScan
  • gin入门教程(1) 引言
  • RabbitMQ 高级特性——事务
  • 107 - Lecture 5 Relations
  • 工地安全新突破:AI视频监控提升巡检与防护水平
  • 医疗保健知识中台:引领医疗行业智能化转型的新篇章
  • 一家光伏企业终止,恐不具行业代表性,市占率仅为2.35%
  • android 利用adb将apk安装到模拟器中的方法
  • Day19 pandas文件读取和数据结构
  • 双线性插值(Bilinear Interpolation)的介绍
  • 第4章 kafka broker
  • Zookeeper是什么:深入分析分布式系统的协调者
  • 【c语言测试】
  • 和为 n 的完全平方数的最少数量