Python正则表达式部分匹配提取

7

我希望找到所有被 [[ ]] 括起来的数据。

[[aaaaa]] -> aaaaa

我的 Python 代码(使用 re 库)如下:

la = re.findall(r'\[\[(.*?)\]\]', fa.read())

如果我只想从[[a|b]]中提取 'a',该怎么办?

有没有简洁的正则表达式可以完成这个任务?(提取|之前的数据)

或者我应该使用额外的if语句?

1个回答

3
您可以尝试以下方法:
r'\[\[([^\]|]*)(?=.*\]\])'

([^\]|]*)将匹配直到找到|]。而(?=.*\]\])则是一个前瞻,以确保]] 在匹配的右侧。

测试:

>>> re.search( r'\[\[([^\]|]*)(?=.*\]\])', '[[aaa|bbb]]' ).group(1)
'aaa'
>>> re.search( r'\[\[([^\]|]*)(?=.*\]\])', '[[aaabbb]]' ).group(1)
'aaabbb'

1
感谢您提供简明扼要的答案和解释。 我应该阅读更多关于正则表达式的文章。 - SUNDONG
只有一件事需要注意 - 这不会处理嵌套的括号(实际上,通常情况下,即使使用正则表达式也需要计数器的帮助)。 - brandonscript

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接