首页 > 解决方案 > Matlab 正则表达式提取值

问题描述

我想使用 Matlab 正则表达式从模式中提取值 <value>2021</value>,, <ns1:value>3049</ns1:value> <ns2:value>9902</ns2:value> 我想要 2021、3049、9902 作为我的输出)。

一般来说,我正在寻找<value> and</value> 或 between <ns(some one-digit number 0-9): value> and之间的数字 </ns(some one-digit number 0-9): value>

我的逻辑是考虑两种情况 1) 价值 | 2) ns[0-9]:value,所以我的代码是

regexp(data, '((?<=<\((ns[0-9]:)|v)*value>)\w+(?=<\/\((ns[0-9]:)|v)*value>))','match')

但它没有用。

有人知道怎么做这个吗?任何帮助将不胜感激,非常感谢!

请注意,我已经成功地用于regexp(data, '((?<=<\w*:*value>)\w+(?=<\/\w*:*value>))','match')提取值,但我想要更具体的东西来使代码更高效(我需要抓取数千个文件)。

标签: regexmatlabextract

解决方案


您可以使用带有反向引用的 2 个捕获组来匹配ns单个数字部分,而不是使用环视。

  • <匹配开口支架
  • ((?:ns\d:)?)捕获组 1,可选匹配ns后跟单个数字和:
  • value>从字面上匹配
  • (\d+)捕获组 2,匹配 1+ 位
  • </\1value>匹配<后跟\1第 1 组中匹配的内容的反向引用,然后匹配值>

查看正则表达式演示


推荐阅读