QT正则表达式获取括号之间的内容

Posted

技术标签:

【中文标题】QT正则表达式获取括号之间的内容【英文标题】:QT Regular Expression getting contents between brackets 【发布时间】:2016-04-11 11:36:37 【问题描述】:

我想拆分一个表达式来获取括号中的内容:

例如。表达式可能如下所示:

    (center:SCREEN)-(25%:SCREEN_WIDTH)

到目前为止,我的代码如下所示:

    QStringList lstTerms = strProcessed.split("/\(([^)]+)\)/")

但这只会返回:

    (center:SCREEN)-(25%:SCREEN_WIDTH)

我想要的是包含两个元素的数组,在上面的例子中:

    [0] center:SCREEN
    [1] 25%:SCREEN_WIDTH

谢谢@noob,最后的例程:

QRegularExpression regex("(?<=\\()[^)]*(?=\\))");
QRegularExpressionMatchIterator matches = regex.globalMatch(strProcessed);
QStringList slstTerms;

while( matches.hasNext() ) 
    QRegularExpressionMatch match = matches.next();

    if (match.hasMatch()) 
        slstTerms.append(match.captured(0));
    

【问题讨论】:

您至少可以尝试"\\(([^()]+)\\)" 将模式限制为匹配(....) 中的内容。顺便说一句,它是一个 matching 模式,而不是一个 splitting 模式。您不需要任何正则表达式分隔符,并且反斜杠必须加倍。 谢谢,但是该表达式只返回 1 个结果,与我已经发布的结果相同。 试试QRegExp rx("\\(([^()]+)\\)"); QStringList lstTerms; int pos; while ((pos = rx.indexIn(str, pos)) != -1) lstTerms &lt;&lt; rx.cap(1); 刚刚试了下,没有任何返回。 使用QRegularExpression regex("\\(([^()]+)\\)");slstTerms.append(match.captured(1)); 你可以使用我建议的更简单有效的正则表达式。 【参考方案1】:

尝试使用look around 断言。使用g保持全局模式

正则表达式: (?&lt;=\()[^)]*

说明:

(?&lt;=\() 在后面查找(,即左括号。

[^)]* 匹配括号内的内容,直到遇到右括号 )

Regex101 Demo


更新:

我稍微改变了正则表达式。删除了look ahead 部分(?=\)),因为它是不必要的。 [^)]* 本身正在检查直到遇到右括号。

【讨论】:

以上是关于QT正则表达式获取括号之间的内容的主要内容,如果未能解决你的问题,请参考以下文章

js 正则表达式获取小括号内的内容,不含括号

正则表达式在Javascript中获取括号之间的字符串

js正则表达式获取多个中括号[]中的内容

正则表达式获取方括号之间的文本,包括差异?

正则表达式获取花括号之间的字符串

用于在最后一个括号 () 之间获取文本的正则表达式