我有一个文字:
[[Hindi]]
[[Madras Talkies]]
[[Eros International]] [[A. R. *Rehman]]
我希望获得[[]]中的所有内容,例如
Hindi
Madras Talkies
Eros International
A. R. *Rehman
我尝试了几个正则表达式:
re.search('\[\[.*\]\]$',values)
\[\[(\w+\s\w+)\]\](.*)$'
\[\[(\w+)\]\]
对他们中的任何人都没有任何作用。任何人都可以建议出现问题吗?
答案 0 :(得分:2)
以下正则表达式可以解决这个问题:
\[\[(.*?)\]\]
你需要做的是让通配符*
变得懒惰所以它只匹配w / e chars .
匹配,直到我们可以匹配最后两个括号(那不是它如何真的有效,但结果却是。)
这个特定的网站可能会为你清除懒惰/贪婪
答案 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]