我想使用 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')
提取值,但我想要更具体的内容来使代码更高效(我需要抓取数千个文件)。
答案 0 :(得分:0)
您可以使用 2 个带有反向引用的捕获组来将 ns
与单个数字部分匹配,而不是使用环视。
<
匹配左括号((?:ns\d:)?)
捕获组 1,可选匹配 ns
后跟一个数字和 :
value>
逐字匹配(\d+)
捕获组 2,匹配 1+ 个数字</\1value>
匹配 <
后跟后向引用 \1
到组 1 中匹配的内容,然后匹配 value>