我想删除@
符号后面所有行中的所有字符。
我写了一些代码:
#!/usr/bin/env python
import sys, re, urllib2
url = 'http://varenhor.st/wp-content/uploads/emails.txt'
document = urllib2.urlopen(url)
html = document.read()
html2 = html[0]
for x in html.rsplit('@'):
print x
但它只删除@
符号并将其余字符复制到下一行。
那么如何修改此代码,删除@
之后所有行中的所有字符?
我应该使用正则表达式吗?
答案 0 :(得分:2)
你分裂太多次了;请改用str.rpartition()
,然后忽略@
之后的部分。每行执行 :
for line in html.splitlines():
cleaned = line.rpartition('@')[0]
print cleaned
或者,对于较旧的Python版本,将str.rsplit()
限制为仅1次拆分,并再次仅获取第一个结果:
for line in html.splitlines():
cleaned = line.rsplit('@', 1)[0]
print cleaned
无论换行样式如何,我都使用str.splitlines()
来干净地拆分文本。您还可以直接遍历urllib2
响应文件对象:
url = 'http://varenhor.st/wp-content/uploads/emails.txt'
document = urllib2.urlopen(url)
for line in document:
cleaned = line.rpartition('@')[0]
print cleaned
演示:
>>> import urllib2
>>> url = 'http://varenhor.st/wp-content/uploads/emails.txt'
>>> document = urllib2.urlopen(url)
>>> for line in document:
... cleaned = line.rpartition('@')[0]
... print cleaned
...
ADAKorb...
AllisonSarahMoo...
Artemislinked...
BTBottg...
BennettLee...
Billa...
# etc.
答案 1 :(得分:1)
您可以使用Python的切片表示法:
import re
import sys
import urllib2
url = 'http://varenhor.st/wp-content/uploads/emails.txt'
document = urllib2.urlopen(url)
html = document.read()
for line in html.splitlines():
at_index = line.index('@')
print line[:at_index]
由于字符串是序列,因此您可以对它们进行切片。例如,
hello_world = 'Hello World'
hello = hello_world[:5]
world = hello_world[6:]
请记住,切片会返回一个新序列,而不会修改原始序列。
答案 2 :(得分:0)
由于您已经import
编辑re
,因此可以使用它:
document = urllib2.urlopen(url)
reg_ptn = re.compile(r'@.*')
for line in document:
print reg_ptn.sub('', line)