【问题标题】:Regular expression (extract key/value pairs)正则表达式(提取键/值对)
【发布时间】:2016-06-27 15:25:05
【问题描述】:

我正在尝试从字符串中提取键/值对的列表(匹配)。例如:

PATH_1:"/", PATH_2:"/OtherPath", TODAY:"2016-06-27",XYZ :"1234"

这应该给出:

PATH_1 / PATH_2 /其他路径 今天 2016-06-27 XYZ 1234

这是我目前所拥有的正则表达式:

((?:"[^"]*"|[^:,])*):((?:"[^"]*"|[^:,])*)

这很好用,除了当我添加一个带有“\”的路径时。例如:

PATH_1:"c:\", PATH_2:"c:\OtherPath", TODAY:"2016-06-27" 

当在双引号序列中找到时,我不知道如何指示正则表达式跳过分号。希望有人可以帮助我。

PS:我正在使用 QT。

最好的问候,

【问题讨论】:

  • 好像是working
  • 是的,这也是我注意到的 :( 该字符串是从 QSettings (ini) 读取的,并且在获取键的值时似乎删除了双引号。因此正则表达式不再起作用:( 真是一团糟……顺便说一下,给您带来的不便,我们深表歉意
  • “跳过分号”?您的输入中没有分号。这是分号:; 这是冒号::
  • Barmar:抱歉输入错误。这是一个冒号

标签: regex qt key-value text-extraction


【解决方案1】:

https://regex101.com/r/vB1rS1/2

如果要删除引号,似乎只需从最后一个 [] 中删除 : 即可。

((?:"[^"]*"|[^:,])*):((?:"[^"]*"|[^,])*)

【讨论】:

  • 非常感谢 Will :) 非常好的解释。顺便说一句,有没有办法不包括捕获组的双引号?但是,如果他们使用 \" 转义,请保留它?最好的问候,
  • 一年多后:是的,我不是 100% 完全符合您的要求,所以我不会给出正则表达式,但听起来您绝对可以做到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多