2017-08-13 47 views
-1

我从一个XML文件中的节点名称包含一个命名空间:正则表达式:大括号后得到的一切

{http://datex2.eu/schema/2/2_0}节点名称

从这个我想修剪的命名空间,这在花括号里。所以结果应该只是节点名称。可能是将花括号中的所有内容与RegEx匹配,然后将其从字符串中删除。 或直接匹配大括号后的内容。但我太愚蠢了,以正确的正则表达式...

感谢您的任何帮助!

PS:我使用Python 3编码。

+1

你好,你尝试过什么? – Bernhard

+1

're.sub(“{。*?}”,“”,nodeName)' –

+1

['{[^}] +}(。*)'](https://regex101.com/r/vq8k3E/2 )?.. – Maroun

回答

2

可以不用正则表达式简单,如果你认为做你想后, “}” 一切:

  1. 随着rsplit - 采取什么样的后“ }“

    s.rsplit("}")[-1]

  2. 更有效地rsplit - 分裂最多一次

    s.rsplit("}", 1)[-1]

  3. 更有效地与rfind,不分配的前缀字符串我们丢掉

    s[s.rfind("}")+1:]

+0

工程就像一个魅力。 – Matthias

1

这样子? Demo

(?P<curlyStuff>\{[^}]+\})?(?P<nodeName>\w+)\b 
+0

这样做的工作。谢谢!只需要把它放到Python代码中。还有一件事:如果名称空间(花括号)不存在,该怎么办?然后你正则表达式找不到任何东西。 – Matthias

+0

已更新,以使curlyStuff可选。看演示。 – linden2015

2

试试这个:

s = '{http://datex2.eu/schema/2/2_0}nodeName' 
search = re.search('{.*}(.*)',s) 
print (search.group(1)) 
+1

请记住'*'是贪婪的。 – Maroun

+0

什么是全文? 'nodeName'之后有什么符号?如果桩只包含一对花括号 - 没关系。 – malugina