我正在尝试使用正则表达式模块编写一小段代码,该模块将从.csv文件中删除部分URL并将选定的块作为输出返回。如果该部分以.com / go /结尾,我希望它在“go”之后返回内容。这是代码:
import csv
import re
with open('rtdata.csv', 'rb') as fhand:
reader = csv.reader(fhand)
for row in reader:
url=row[6].strip()
section=re.findall("^http://www.xxxxxxxxx.com/(.*/)", url)
if section==re.findall("^go.*", url):
section=re.findall("^http://www.xxxxxxxxx.com/go/(.*/)", url)
print url
print section
这里有一些示例输入输出:
http://www.xxxxxxxxx.com/go/news/videos/
news/videos
http://www.xxxxxxxxx.com/new-cars/
new-cars
我在这里错过了什么?
答案 0 :(得分:2)
尝试以下
s = re.search('http://www.xxxxxxxxx.com/(go/)?(.*)/', url)
section = s.group(2)
而不是
section=re.findall("^http://www.xxxxxxxxx.com/(.*/)", url)
if section==re.findall("^go.*", url):
section=re.findall("^http://www.xxxxxxxxx.com/go/(.*/)", url)
使用正则表达式的直观说明:
http://www.xxxxxxxxx.com/(go/)?(.*)/
答案 1 :(得分:1)
由于你的第二个正则表达式中的^
,这是失败的。 go
不在网址的开头,因此匹配失败。
将"^go.*"
更改为"go.*"
可以解决您的问题。
答案 2 :(得分:0)
从我在别处看到的,正确地做你正在做的事情。
section=re.match("^http://www.xxxxxxxxx.com/(.*/)", url).group(1)
if re.match("^go.*", section):
section=re.match("^go/(.*/)", section).group(1)
更好的是,你应该用一个正则表达式完成所有这些:
section=re.match("^http://www.xxxxxxxxx.com/(go/)?(.*/)", url).group(1)
答案 3 :(得分:0)
您可以直接分析文件的内容,而无需使用scv模块功能阅读:
import re
tata = '''0,1,2,3,4,5, http://www.gagal.com/go/zui ,kkll
00,10,20,30,40,50, http://hardo.fr/glut/popolo , ocean
000,100,200,300,400,500, http://debeny.cz/rutu/padu/go/gemini/sun=
00,01,02,03,04,05,http://www.klemperer.com/discs/major
000,100,200,300,400,500, http://www.julia.ch/go/snowy/trf
'''
r = re.compile('^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,'
' *(http://[^ ,\n]+?(?:/go/([^ ,\n]+))?(?=[ ,\n]))',
re.MULTILINE)
print tata
for g1,g2 in r.findall(tata):
print '%s\n%s\n' % (g1,g2 if g2 else g1)
结果
0,1,2,3,4,5, http://www.gagal.com/go/zui ,kkll
00,10,20,30,40,50, http://hardo.fr/glut/popolo , ocean
000,100,200,300,400,500, http://debeny.cz/rutu/padu/go/gemini/sun=
00,01,02,03,04,05,http://www.klemperer.com/discs/major
000,100,200,300,400,500, http://www.julia.ch/go/snowy/trf
http://www.gagal.com/go/zui
zui
http://hardo.fr/glut/popolo
http://hardo.fr/glut/popolo
http://debeny.cz/rutu/padu/go/gemini/sun=
gemini/sun=
http://www.klemperer.com/discs/major
http://www.klemperer.com/discs/major
http://www.julia.ch/go/snowy/trf
snowy/trf