Python - 如何删除某些符号后所有行中的所有字符?

时间:2014-06-01 22:03:13

标签: python regex

我想删除@符号后面所有行中的所有字符。 我写了一些代码:

#!/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

但它只删除@符号并将其余字符复制到下一行。 那么如何修改此代码,删除@之后所有行中的所有字符? 我应该使用正则表达式吗?

3 个答案:

答案 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)