我正在从配置文件中读取电子邮件地址列表。地址可以用逗号或分号分隔 - 例如
billg@microsoft.com,steve@apple.com, dhh@37signals.com
billg@microsoft.com;steve@apple.com; dhh@37signals.com
我也希望摆脱电子邮件地址周围的任何空白。
我需要将它们放入这样的Python列表中:
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
最恐怖的做法是什么?感谢。
答案 0 :(得分:10)
在这种情况下,我会使用re模块
>>> import re
>>>
>>> data = "billg@microsoft.com;steve@apple.com; dhh@37signals.com"
>>> stuff = re.split(r"\s*[,;]\s*", data.strip())
答案 1 :(得分:6)
正则表达式很强大,可能就是这里的方式;但对于像这样简单的事情,字符串方法也可以。这是一个简洁的解决方案:
[s.strip() for s in s1.replace(',', ';').split(';')]
测试输出:
>>> s1 = "billg@microsoft.com,steve@apple.com, dhh@37signals.com"
>>> s2 = " billg@microsoft.com;steve@apple.com; dhh@37signals.com "
>>> print [s.strip() for s in s1.replace(',', ';').split(';')]
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
>>> print [s.strip() for s in s2.replace(',', ';').split(';')]
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
答案 2 :(得分:1)
如果它只是';'或者只有','并且你知道哪个,使用string.split:
>>> 'adjifjdasf;jdiafjodafs;jdiajof'.split(';')
['adjifjdasf', 'jdiafjodafs', 'jdiajof']
http://docs.python.org/library/stdtypes.html#str.split
编辑对于空格,您也可以这样做:
>>> map(str.strip, 'adjifjdasf;jdiafjodafs ; jdiajof'.split(';'))
['adjifjdasf', 'jdiafjodafs', 'jdiajof']
答案 3 :(得分:1)
您可以使用string.maketrans在单个传递中用空格替换多个分隔符
import string
data = "one two, three ; four "
stuff = [i for i in data.translate(string.maketrans(";,", " ")).split()]
print stuff # -> ['one', 'two', 'three', 'four']
答案 4 :(得分:1)
你可以使用Python的字符串操作工具来完成它:
import string
s1 = "billg@microsoft.com,steve@apple.com, dhh@37signals.com"
s2 = "billg@microsoft.com;steve@apple.com; dhh@37signals.com"
print s1.translate(string.maketrans(';',','), string.whitespace).split(',')
# ['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
print s2.translate(string.maketrans(';',','), string.whitespace).split(',')
# ['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
答案 5 :(得分:0)
data = ''' billg@microsoft.com,steve@apple.com, dhh@37signals.com
billg@microsoft.com;steve@apple.com;\t \rdhh@37signals.com '''
print repr(data),'\n'
import re
print re.findall('[^,\s;]+', data)
结果
' billg@microsoft.com,steve@apple.com, dhh@37signals.com \n billg@microsoft.com;steve@apple.com;\t \rdhh@37signals.com '
['billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com', 'billg@microsoft.com', 'steve@apple.com', 'dhh@37signals.com']
注意此数据中的'\ n','\ t'和'\ r'
答案 6 :(得分:-1)
def gen_list(file_path):
read= open(file_path, "r")
split1= read.split(";")
new_list= []
for i in split1:
split2 = i.split(",")
split_list = [item.strip() for item in split2 if "@" in item]
new_list.extend(split_list)
return new_list
#
这适用于逗号和;行数可以进一步减少