将QString拆分为第n个逗号

时间:2013-11-30 18:00:35

标签: c++ regex qt

我的QString格式类似于QString word = "123,12,1,"This is, a test";(从CSV文件中提取)。我想在每个逗号分开它,不包括最后一个单元格中字符串中的任何逗号。该列表与{"123", "12", "1", "\"This is, a test\""}类似。

格式是一个最多包含3位数的数字,然后是一个最多包含2位数的数字,然后是一个最多包含1位数的数字,后跟一个可以包含逗号的字符串。列表中应始终有4个QStrings。这是我正在尝试的

QString word = "123,12,1,\"This is, a test\"";
QStringList list = word.split( QRegExp( "(\\d+)," ) );

我从here获得了此代码。此代码仅保存列表中的第4个QString,前3个为空白。有人可以帮帮我吗?我从未使用过正则表达式。

由于

3 个答案:

答案 0 :(得分:1)

这会有用吗?

编辑 - 这是一个小测试。

如果您没有得到预期的结果,那么无法使用QT的分割。
您应该在while循环中解析它以填充列表。

 QString str      = "\"123,12,1,\"This is, a test\"";
 QStringList list =
      str.split(
         QRegExp("(\"[^\"\\\\]*(?:\\\\[\\S\\s][^\"\\\\]*)*\"|\\d+)|,"),
         QString::SkipEmptyParts
      );

答案 1 :(得分:0)

该正则表达式仅适用于数字。你应该使用像

这样的东西
QRegExp( "[A-Za-z\\d]+," )

答案 2 :(得分:0)

使用regexp sample,可以轻松研究适当的模式:

enter image description here

将“Escaped Pattern”的上下文放在QRegExp构造函数