我正在尝试解析具有以下格式的字符串:
text="some random string <inAngle> <anotherInAngle> [-option text] [-anotherOption <text>] [-option (Y|N)]"
我想将字符串分成三部分。
如果我使用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个单词
答案 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组:方括号内的内容See demo at regex101(使用&#34;代码生成器&#34;如果需要)
答案 2 :(得分:0)
<(.+?)>(?![^\[]*\])|\[(.+?)\]|((?!\s+)[^\[\]<>]+)
您只需使用此re.findall
。请参阅演示。