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 << rx.cap(1);
刚刚试了下,没有任何返回。
使用QRegularExpression regex("\\(([^()]+)\\)");
和slstTerms.append(match.captured(1));
你可以使用我建议的更简单有效的正则表达式。
【参考方案1】:
尝试使用look around
断言。使用g
保持全局模式
正则表达式: (?<=\()[^)]*
说明:
(?<=\()
在后面查找(
,即左括号。
[^)]*
匹配括号内的内容,直到遇到右括号 )
。
Regex101 Demo
更新:
我稍微改变了正则表达式。删除了look ahead
部分(?=\))
,因为它是不必要的。 [^)]*
本身正在检查直到遇到右括号。
【讨论】:
以上是关于QT正则表达式获取括号之间的内容的主要内容,如果未能解决你的问题,请参考以下文章