Python正则表达式精确匹配括号
我正在尝试解析一个特定格式的字符串,格式如下:
text = "一些随机字符串 <在尖括号内> <另一个在尖括号内> [-选项文本] [-另一个选项] [-选项 (Y|N)]"
我想把这个字符串分成三部分。
- 仅仅是 "一些随机字符串"
- 所有仅在尖括号内的内容,比如上面的在尖括号内和另一个在尖括号内。
- 所有在方括号内的内容。
如果我使用这个正则表达式:
re.findall(r'\[(.+?)\]', text)
它能提取出方括号内的所有内容。但是如果我用同样的正则表达式去处理尖括号,
re.findall(r'<(.+?)>', text)
它会把方括号内的尖括号内容也提取出来。例如,上面提到的 "text" 就是在 [-另一个选项] 里面的。我不想要这个。针对尖括号的正则表达式应该只返回 "在尖括号内" 和 "另一个在尖括号内"。
那么,针对这个情况,正则表达式应该怎么写呢?
另外,我该怎么只提取第一部分,也就是 "一些随机字符串"。这个字符串可以有2到3个单词。
相关文章:
- 暂无相关问题
3 个回答
0
<(.+?)>(?![^\[]*\])|\[(.+?)\]|((?!\s+)[^\[\]<>]+)
你可以简单地使用这个 re.findall
。看看这个演示。
2
试试看这个正则表达式能否 捕捉 你需要的内容
\s*([^><[\]]+\b)|\[([^]]*)]|<([^>]*)>
\s*
前面可以有可选的 空格([^><[\]]+\b)
第一组:任何 不是 括号的内容,直到遇到 \b(如果不需要可以去掉)|\[([^]]*)]
或者第二组:方括号里面的内容|<([^>]*)>
或者第三组:尖括号里面的内容
在 regex101 上查看示例(如果需要可以使用“代码生成器”)
1
你可以在查找尖括号中的内容之前,简单地忽略方括号中的所有内容:
interm = re.sub(r'\[(.*?)\]', '', text)
re.findall(r'<(.+?)>', interm)
输出结果
['inAngle', 'anotherInAngle']
然后在匹配第一部分时,匹配所有内容直到遇到 [
或 <
。不过要注意,如果字符串中允许随机出现这些符号而没有闭合,那么这个方法就不适用了:
re.findall(r'([^<\[]+)', text)[0]
输出结果
some random string