【问题标题】:Python: Regex match or condition?Python:正则表达式匹配或条件?
【发布时间】:2013-11-13 16:19:03
【问题描述】:

我有一个类似{string}{string}{string} 的字符串,我可以通过它来解析

import re
input_string = '{string}{string}{string}'
for match in re.finditer(r'{([^}]*)}', input_string):
     print str(match.group(0)) #outputs {string}

但我也想用大括号后面的星号捕捉字符串。

input_string = '{string}{string}*{string}{string}*'

如何修改正则表达式,以便同时捕获 {string}{string}*

我尝试过r'{([^}]*)}|*',但似乎没有用。

另外,如果字符串包含大括号怎么办?前任。 {string{3}}我如何确保只有外部的 {} 被捕获而不是内部的?

【问题讨论】:

  • 什么....我会接受一个非常好的答案,但它已经消失了。
  • 对不起,我错过了对您第二个问题的回复;未删除。

标签: python regex


【解决方案1】:

在您的正则表达式末尾添加\*? 以匹配可选的*

import re
input_string = '{string}{string}*{string}{string}*'
for match in re.finditer(r'{([^}]*)}\*?', input_string):
     print str(match.group(0)) #outputs {string}

输出:

{string}
{string}*
{string}
{string}*

至于嵌套括号,简单的正则表达式无法解析。您可以为此使用递归正则表达式,但它变得不可读(example)。您应该使用适当的解析库,更多讨论和示例here

【讨论】:

  • 啊我明白了,当有嵌套括号时它会失败
  • 它将匹配左括号之后的第一个右括号。它将匹配 {{a} 输入 {{a}}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多