用于获取[[]]内的全文(任何内容)的正则表达式

时间:2012-03-25 23:39:57

标签: python regex python-2.7

我有一个文字:

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

我希望获得[[]]中的所有内容,例如

Hindi
Madras Talkies
Eros International
A. R. *Rehman

我尝试了几个正则表达式:

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

对他们中的任何人都没有任何作用。任何人都可以建议出现问题吗?

4 个答案:

答案 0 :(得分:2)

以下正则表达式可以解决这个问题:

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

你需要做的是让通配符*变得懒惰所以它只匹配w / e chars .匹配,直到我们可以匹配最后两个括号(那不是它如何真的有效,但结果却是。)

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

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

答案 1 :(得分:0)

你需要一个非贪婪的搜索,所以正则表达式应该是:

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

如果Python 2.7不支持非贪婪模式(?之后的.*),那么你只能使用.*,但第三个采样行有两套加倍的方括号只匹配一次,捕获的文本将是:

Eros International]] [[A. R. *Rehman

使用非贪婪匹配,你会在该行上获得两个单独的匹配。

答案 2 :(得分:0)

不是匹配角色(如果它存在)+任何额外的角色,比如你们所有人,我匹配 [] (最小1)里面的< strong> [[]]

$ 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'

答案 3 :(得分:0)

你有没有理由不跳过字符串中的前两个字符和最后两个字符?

s = ['[[Hindi]]',
     '[[Madras Talkies]]',
     '[[Eros International]]',
     '[[A. R. *Rehman]]']
names = [x[2:-2] for x in s]