【问题标题】:RegEx: get everything after curly braces正则表达式:得到花括号后的所有内容
【发布时间】:2018-01-21 10:32:09
【问题描述】:

我从一个包含命名空间的 XML 文件中获得了节点名称:

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

从此我想修剪花括号中的命名空间。所以结果应该只是节点名称。可以用正则表达式匹配花括号中的所有内容,然后将它们从字符串中删除。 或者直接匹配大括号后面的内容。但是我太愚蠢了,无法正确使用正则表达式...

感谢您的帮助!

PS:我正在使用 Python 3 进行编码。

【问题讨论】:

  • 您好,您尝试了什么?
  • re.sub("{.*?}", "", nodeName)
  • 问题。您是否添加了花括号或者它们实际上存在于 nodeName 中?
  • @MarounMaroun 您的第一个 RegEx 找到了所有内容,第一部分找到了带有花括号的内容。是否需要修改以仅查找节点名称?

标签: python regex trim


【解决方案1】:

如果您假设您想要“}”之后的所有内容,则可以在没有正则表达式的情况下完成:

  1. 使用rsplit - 取“}”之后的内容

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

  2. rsplit 更高效 - 最多拆分一次

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

  3. rfind 更高效,不会分配带有我们要丢弃的前缀的字符串

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

【讨论】:

  • 像魅力一样工作。
【解决方案2】:

试试这个:

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

【讨论】:

  • 请记住* 是贪婪的。
  • 全文是什么? 'nodeName' 后面是什么符号?如果字符串只包含一对花括号 - 没关系。
【解决方案3】:

像这样? Demo.

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

【讨论】:

  • 就可以了。谢谢!只需要把它放到 Python 代码中。还有一件事:如果名称空间(大括号)不存在怎么办。然后你的正则表达式什么也找不到。
  • 更新为 curlyStuff 可选。见演示。
猜你喜欢
  • 2012-10-31
  • 1970-01-01
  • 2018-08-20
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多