c++ - Qt正则表达式在[]之间分割字符串

标签 c++ regex qt

我想拆分一个字符串[A ] [B 1] [C 2] [D 254] [E 0]

进入[A][B 1][C 2][D 254][E 0]

我已经在线测试了表达式 \[(.*?)\],它运行良好,但我无法使用 QRegExp 拆分它。代码如下。

    QRegExp rx("\[(.*?)\]"); //RegEx for [----]
    QString str("[A ] [B 1] [C 2] [D 254] [E 0] ");
    QStringList query = str.split(rx);
    for( auto q : query ) {
        qDebug() << q;
    }

谁能指出我哪里出错了。谢谢。

最佳答案

您需要正确拆分此字符串的是“lookaheads”“lookbehinds”

QString s("[A ] [B 1] [C 2] [D 254] [E 0]");
QStringList sl = s.split(QRegularExpression("(?<=\\])[ ](?=\\[)"));

将其扔进 qDebug() << sl;给了我这个:

enter image description here

让我们分解一下:

  • (?<=\\])(?<=PutTextHere)是一个“positive lookbehind”,它将查看它后面的字符串是否匹配,但不将其包含在匹配本身中。
  • [ ]这可能只是一个空白空间: -- 为了便于阅读,我只包含了方括号。
  • (?=\\[)(?=PutTextHere)是一个“正面前瞻”
  • \\[您需要两次转义的原因是正则表达式需要一次转义 \ ,并且您的代码将需要进行转义。另一种选择是: <pre>QStringList sl = s.split(QRegularExpression("(?<=" + QRegularExpression::escape("]") + ")[ ](?=" + QRegularExpression::escape("[") + ")"));</pre>

关于c++ - Qt正则表达式在[]之间分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645943/

相关文章:

python - 如何显示 PyQt 模式对话框并在关闭后从其控件中获取数据?

c++ - Qt Graphics,向前或向后移动对象

c++ - 具有最小 OOP 的 Qt 4.0 信号和槽

c++ - 难以理解 * 和 & 当它们与线程一起出现时

c++ - 2D阵列井字游戏-我做错了什么?

c++ - 如何在 C++ 中找到 ELF 二进制文件所需的动态库?

c++ - 在添加作业期间删除 1 纳秒的延迟时,标准线程作业系统中止

regex - Ruby Regex - 如果字符串超过 10 个字符,则删除第一个字符(如果它是 "1")

regex - 在 vim 上使用正则表达式查找并将所有 href 链接内容替换为 '#' ?

r - 提取文本的匹配关键字