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

时间:2014-05-29 17:14:34

标签: regex xml namespaces prefix

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

例如:

<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 ......

3 个答案:

答案 0 :(得分:1)

这样的东西?

[<]([^:]+)

将前缀(在尖括号之后和冒号之前)放入组1中。

我看到我在仔细观察之后误解了这个问题。

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

将产生$ 3组和5美元的结果。我想这会做到。

哎呀,错过了?

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

答案 1 :(得分:0)

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

这是在python.Hope这解决了你的问题。

答案 2 :(得分:-1)

这是一个perl版本:

my @collects = $str =~ /[<|\s](\w+):[^free]/ig;