我有几个字符串,其中的短语或单词由多个空格分隔。
c1 = "St. Louis 12 Cardinals"
c2 = "Boston 16 Red Sox"
c3 = "New York 13 Yankees"
如何使用python split(" ")
函数编写一个函数来将每一行分成一个字符串数组?例如,c1将转到['St. Louis', '12', 'Cardinals']
。
调用split(" ")
然后修剪组件实体将无法正常工作,因为某些实体(例如St. Louis或Red Sox)中有空格。
但是,我知道所有实体至少相隔2个空格,并且没有实体在其中有2个空格。顺便说一句,我实际上有大约100个城市要处理,而不是3.谢谢!
答案 0 :(得分:4)
没有正则表达式:
c1 = "St. Louis 12 Cardinals"
words = [w.strip() for w in c1.split(' ') if w]
# words == ['St. Louis', '12', 'Cardinals']
答案 1 :(得分:3)
import re
re.split(r' {2,}', c1)
re.split(r' {2,}', c2)
re.split(r' {2,}', c3)
答案 2 :(得分:2)
您可以使用正则表达式执行此操作:
import re
blahRegex = re.compile(r'(.*?)\s+(\d+)\s+(.*?)')
for line in open('filename','ro').readlines():
m = blahRegex.match(line)
if m is not None:
city = m.group(1)
rank = m.group(2)
team = m.group(3)
有很多方法可以让那只猫去皮肤,你可以使用named groups
,或者使你的正则表达更加紧密..但是,这应该可以做到。
答案 3 :(得分:2)
您可以使用re.split
>>> re.split('\s{2,}','St. Louis 12 Cardinals')
['St. Louis', '12', 'Cardinals']
答案 4 :(得分:2)
看起来内容是固定宽度的。如果情况总是这样,假设它们是空格而不是制表符,那么你总是可以使用切片来反转它:
split_fields = lambda s: [s[:16].strip(), s[16:31:].strip(), s[31:].strip()]
或:
def split_fields(s):
return [s[:16].strip(), s[16:31:].strip(), s[31:].strip()]
使用示例:
>>> split_fields(c1)
['St. Louis', '12', 'Cardinals']
>>> split_fields(c2)
['Boston', '16', 'Red Sox']
>>> split_fields(c3)
['New York', '13', 'Yankees']