2017-08-13 70 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