用于在[[]]内获取整个文本(任何内容)的正则表达式

2024-09-28 21:31:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一条短信:

[[Hindi]]
[[Madras Talkies]]
[[Eros International]] [[A. R. *Rehman]]

我想获得[[]]内的一切

^{2}$

我试过一些正则表达式,比如:

        re.search('\[\[.*\]\]$',values)
    \[\[(\w+\s\w+)\]\](.*)$'
    \[\[(\w+)\]\]

对他们中的任何一个都没用。有人能告诉我出了什么问题吗?在


Tags: research短信valuesinternationaleroshindimadras
3条回答

下面的regex应该能做到这一点:

\[\[(.*?)\]\]

您需要做的是使通配符*变为惰性,这样它将只匹配w/e字符.匹配,直到我们可以用最后两个括号进行匹配(这不是它真正的工作方式,而是结果)。在

这个特别的网站可能会为你清除懒惰/贪婪

http://www.regular-expressions.info/repeat.html#greedy

我不匹配一个字符,如果它存在+任何额外的字符,就像你们这里的所有人,我匹配的不是[](至少1个)在[[]]

$ python2
>>> import re
>>> text = '[[Eros International]] [[A. R. *Rehman]]'
>>> re.findall('\[\[([^\[\]]+)\]\]', text)
['Eros International', 'A. R. *Rehman']
>>> re.findall('\[\[([^\[\]]+)\]\]', text)[0]
'Eros International'
>>> re.findall('\[\[([^\[\]]+)\]\]', text)[1]
'A. R. *Rehman'

您需要非贪婪搜索,因此regex应该是:

\[\[(.*?)\]\]

如果Python2.7不支持非贪心模式(即.*之后的?),那么您可以只使用.*,但是第三个带有两组双方括号的示例行只匹配一次,捕获的文本将是:

^{pr2}$

使用非贪心匹配,在那条线上会得到两个独立的匹配。在

相关问题 更多 >