如何将命名空间前缀与正则表达式匹配

问题描述 投票:0回答:3

我真正想做的是使用正则表达式来匹配标签和属性的所有命名空间前缀。

例如:

<foo:person bar:id="43">
  text text <nomatch:free text
  <baz:name>
    text nomatch:free> text
  </baz:name>
    text nomatch:free="44" text
    <age bae:years="44" />
    text
</foo:person>

我想要的是只提取以下前缀:foo、baz、bad、bae、bar

我找不到实现此功能的正则表达式。

请注意正则表达式不应硬编码名称 foo、baz、bad、bae、bar...

regex xml namespaces prefix
3个回答
1
投票

有这样的吗?

[<]([^:]+)

会将前缀(尖括号之后、冒号之前)放入第 1 组。

仔细观察后,我发现我误解了这个问题。

[<](((\w+):\w+)(\s+(\w+):\w+="\d+"\s*[\/])?)>

这将产生 3 美元组和 5 美元组的结果。 我想这样就可以了。

哎呀,错过了?

 [<](((\w+):\w+)(\s+(\w+):\w+="\d+"\s*[\/]?)?)>

0
投票

这是用Python编写的:

import re
x='<foo:person bar:id="43">'
y=re.findall(r"(\w+)(?=:)",x)
print y
['foo', 'bar']

-1
投票

这是一个 Perl 版本:

my @collects = $str =~ /[<|\s](\w+):[^free]/ig;
© www.soinside.com 2019 - 2024. All rights reserved.