Matlab 正则表达式提取值

时间:2021-07-09 17:38:01

标签: regex matlab extract

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

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

我的逻辑是考虑两种情况 1) value | 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') 提取值,但我想要更具体的内容来使代码更高效(我需要抓取数千个文件)。

1 个答案:

答案 0 :(得分:0)

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

  • < 匹配左括号
  • ((?:ns\d:)?) 捕获组 1,可选匹配 ns 后跟一个数字和 :
  • value> 逐字匹配
  • (\d+) 捕获组 2,匹配 1+ 个数字
  • </\1value> 匹配 < 后跟后向引用 \1 到组 1 中匹配的内容,然后匹配 value>

看到一个 Apps Script at Stack Overflow