【问题标题】:How to read semicolon separated certain values from a QString?如何从 QString 中读取分号分隔的某些值?
【发布时间】:2012-06-14 16:25:26
【问题描述】:

我正在使用 Qt/KDE 开发一个应用程序。在为此编写代码时,我需要读取包含 (; delimited) 等值的 QString

<http://example.com/example.ext.torrent>; rel=describedby; type="application/x-bittorrent"; name="differentname.ext"

我需要将每个属性(如 rel、类型和名称)读入不同的 QString。到目前为止我采取的方法是这样的

if (line.contains("describedby")) {
        m_reltype = "describedby" ;
    }
    if (line.contains("duplicate")) {
        m_reltype = "duplicate";
    }

也就是说,如果我只需要对属性的存在(而不是它的值)感到困扰,我将手动查找文本并设置属性是否存在。但是,这种方法对于需要将实际值存储在QString 中的“类型”和名称等属性失败。虽然我知道这可以通过在分隔符; 处拆分整个字符串然后搜索属性或其值来完成,但我想知道是否有更清洁和更有效的方法来做到这一点。

【问题讨论】:

    标签: c++ string qt parsing kde


    【解决方案1】:

    据我了解,数据并不总是 URL。 所以,

    1:拆分字符串

    2:对于每个子字符串,将标识符与值分开:

    id = str.mid(0,str.indexOf("="));
    value = str.mid(str.indexOf("=")+1);
    

    你也可以使用正则表达式:

    regexp = "^([a-z]+)\s*=\s*(.*)$";
    id = \1 of the regexp;
    value = \2 of the regexp;
    

    【讨论】:

      【解决方案2】:

      我需要将每个属性(如 rel、类型和名称)读入不同的 QString。

      是否保证此字符串始终是 URL?

      我想知道是否有一种更清洁、更有效的方法。

      不要重新发明轮子!您可以使用 QURL::queryItems 解析这些查询变量并返回名称-值对的映射。

      但是,请确保您的字符串是格式正确的 URL(以便QURL 不会拒绝它)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 2020-04-04
        • 2012-06-13
        • 1970-01-01
        相关资源
        最近更新 更多