我想拆分一个字符串[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;
给了我这个:
让我们分解一下:
-
(?<=\\])
或(?<=PutTextHere)
是一个“positive lookbehind”,它将查看它后面的字符串是否匹配,但不将其包含在匹配本身中。 -
[ ]
这可能只是一个空白空间:-- 为了便于阅读,我只包含了方括号。
-
(?=\\[)
或(?=PutTextHere)
是一个“正面前瞻” -
\\[
您需要两次转义的原因是正则表达式需要一次转义\
,并且您的代码将需要进行转义。另一种选择是:<pre>QStringList sl = s.split(QRegularExpression("(?<=" + QRegularExpression::escape("]") + ")[ ](?=" + QRegularExpression::escape("[") + ")"));</pre>
关于c++ - Qt正则表达式在[]之间分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645943/