Python RegEx用于括号的精确匹配

时间:2015-11-17 00:53:30

标签: python regex string

我正在尝试解析具有以下格式的字符串:

 text="some random string <inAngle> <anotherInAngle> [-option text] [-anotherOption <text>] [-option (Y|N)]" 

我想将字符串分成三部分。

  1. 只是&#34;一些随机字符串&#34;
  2. 只在尖括号中的一切。 I.E inAngle和另一个InOngle上面。
  3. 方括号内的所有内容。
  4. 如果我使用RegEx

    re.findall(r'\[(.+?)\]', text)
    

    它在方括号内提供了我需要的一切。但是,如果我使用带尖括号的相同RegEx,

    re.findall(r'<(.+?)>', text)
    

    它给出了方括号内的尖括号内的文本。例如&#34; text&#34;从上面的[-anotherOption]。我不要那个。用于尖括号匹配的RegEx应仅返回&#34; inAngle&#34; &#34; anotherInAngle&#34;从上面。 什么是RegEx呢?

    另外,我如何只得到第一部分,即#34;一些随机字符串&#34;。此字符串可以包含2或3个单词

3 个答案:

答案 0 :(得分:1)

在搜索尖括号中的内容之前,您可以简单地忽略方括号之间的所有内容:

interm = re.sub(r'\[(.*?)\]', '', text)
re.findall(r'<(.+?)>', interm)

输出

['inAngle', 'anotherInAngle']

然后匹配第一部分,将所有内容匹配到[<。如果允许字符串随机地将这些符号中的任何一个嵌入第一部分中,则不会有效:

re.findall(r'([^<\[]+)', text)[0]

输出

some random string 

答案 1 :(得分:1)

尝试此正则表达式capture您需要什么

\s*
  • ([^><[\]]+\b)前面有可选的whitespace
  • |\[([^]]*)]第1组:任何non括号,直到\b(如果不受欢迎则删除)
  • |<([^>]*)>或第2组:方括号内的内容
  • {{1}}或第3组:尖括号内的内容

See demo at regex101(使用&#34;代码生成器&#34;如果需要)

答案 2 :(得分:0)

<(.+?)>(?![^\[]*\])|\[(.+?)\]|((?!\s+)[^\[\]<>]+)

您只需使用此re.findall。请参阅演示。

https://regex101.com/r/hE4jH0/10