我想要获得价值
l1 = [u'/worldcup/archive/southafrica2010/index.html', u'/worldcup/archive/germany2006/index.html', u'/worldcup/archive/edition=4395/index.html', u'/worldcup/archive/edition=1013/index.html', u'/worldcup/archive/edition=84/index.html', u'/worldcup/archive/edition=76/index.html', u'/worldcup/archive/edition=68/index.html', u'/worldcup/archive/edition=59/index.html', u'/worldcup/archive/edition=50/index.html', u'/worldcup/archive/edition=39/index.html', u'/worldcup/archive/edition=32/index.html', u'/worldcup/archive/edition=26/index.html', u'/worldcup/archive/edition=21/index.html', u'/worldcup/archive/edition=15/index.html', u'/worldcup/archive/edition=9/index.html', u'/worldcup/archive/edition=7/index.html', u'/worldcup/archive/edition=5/index.html', u'/worldcup/archive/edition=3/index.html', u'/worldcup/archive/edition=1/index.html']
我正在尝试使用下面的内容开始正则表达式
m = re.search(r"\d+", l)
print m.group()
但我想要“archive /”和“/index.html”之间的价值
我g目结舌并试过像(?<=archive/\/index.html).*(?=\/index.html:)
但它对我不起作用..如何将结果列表设为'
result = ['germany2006','edition=4395','edition=1013' , ...]
答案 0 :(得分:2)
如果您确定该模式将始终匹配,则可以使用此
import re
print [re.search("archive/(.*?)/index.html", l).group(1) for l in l1]
或者您可以像这样分开
print [l.rsplit("/", 2)[-2] for l in l1]
答案 1 :(得分:1)
环顾四周就是你所需要的。你需要像这样使用它:
>>> [re.search(r"(?<=archive/).*?(?=/index.html)", s).group() for s in l1]
[u'southafrica2010', u'germany2006', u'edition=4395', u'edition=1013', u'edition=84', u'edition=76', u'edition=68', u'edition=59', u'edition=50', u'edition=39', u'edition=32', u'edition=26', u'edition=21', u'edition=15', u'edition=9', u'edition=7', u'edition=5', u'edition=3', u'edition=1']
答案 2 :(得分:1)
正则表达式
m = re.search(r'(?<=archive\/).+(?=\/index.html)', s)
可以解决这个问题,假设s
是列表中的字符串。
答案 3 :(得分:1)
您可以从以下代码中获取帮助。它将解决您的问题。
>>> import re >>> p = '/worldcup/archive/southafrica2010/index.html' >>> r = re.compile('archive/(.*?)/index.html') >>> m = r.search(p) >>> m.group(1) 'southafrica2010'