2017-08-17 59 views
0

我有一個特別長的,討厭的字符串,它看起來是這樣的:追加章節列出在Python

nastyString = ' nameOfString1, Inc_(stuff)\n nameOfString2, Inc_(stuff)\n ' 

等。關鍵的定義特徵是每個「nameOfString」後面跟着一個\n,後面有兩個空格。第一個名字的字符串在它前面也有兩個空格。

我試圖創建一個列表,將是這個樣子:

niceList = [nameOfString1, Inc_(stuff), nameOfString2, Inc_(Stuff)]等。

我試着使用newString = nastyString.split()以及newString = nastyString.replace('\n ', ''),但最終,這些解決方案無法工作,因爲每個nameOfString逗號之後和之前的「I」公司的而且有空間,而不是所有的nameOfStrings有一個'公司',但是大多數確實在他們的名字中有某種空間。

如果我能解決這個問題,我真的很感激一些指導或指導,謝謝!

+0

也許['[x.split( ' '),用於在s.strip X()分裂(' \ n')]'](HTTPS:/ /ideone.com/3fFWY0)會做什麼? –

+0

@WiktorStribiżew這似乎輸出嵌套在一個巨型列表中的很多列表。不過,我希望能有輸出: '名單= [ 'nameOfString1公司(東西)', 'nameOfString2公司(東西)']' - 有什麼建議?感謝您的輸入! – Rohan

+0

你已經有很多的提示:) –

回答

1
nastyString = ' nameOfString1, Inc_(stuff)\n nameOfString2, Inc_(stuff)\n ' 
# replace '\n' with ',' 
nastyString = nastyString.replace('\n', ',') 
# split at ',' and `strip()` all extra spaces 
niceList = [v.strip() for v in nastyString.split(',') if v.strip()] 

輸出:

niceList 
['nameOfString1', 'Inc_(stuff)', 'nameOfString2', 'Inc_(stuff)'] 

更新:OP共享的新的輸入:

這是真棒,從來不知道帶功能。然而,我其實正在嘗試包括「公司」部分,所以我希望輸出:['nameOfString1,Inc_(stuff)','nameOfString2,Inc_(stuff)']等等,有什麼建議嗎?

nastyString = ' nameOfString1, Inc_(stuff)\n nameOfString2, Inc_(stuff)\n ' 
niceList = [v.strip() for v in nastyString.split('\n') if v.strip()] 

新的輸出:

niceList 
['nameOfString1, Inc_(stuff)', 'nameOfString2, Inc_(stuff)'] 
+0

這是真棒,從來不知道帶功能。不過,我其實想包括「公司」部分,所以我希望的輸出: '[「nameOfString1,INC_(東西)」,「nameOfString2,INC_(東西)」]'等等,任何建議? – Rohan

+0

這很容易。只是不能在'\ n'上替換而在\ n上分割。我會更新我的答案 –

+0

@Rohan更新的代碼。現在檢查。 –

1

您可以使用正則表達式:

import re 

nastyString = ' nameOfString1, Inc_(stuff)\n nameOfString2, Inc_(stuff)\n ' 

new_string = [i for i in re.split("[\n\s,]", nastyString) if i] 

輸出:

['nameOfString1', 'Inc_(stuff)', 'nameOfString2', 'Inc_(stuff)'] 
1

,如果你不喜歡更換'\n'這樣做:

import re 
nastyString = ' nameOfString1, Inc_(stuff)\n nameOfString2, Inc_(stuff)\n ' 
word =re.findall(r'.',nastyString) 
s="" 
for i in word: 
    s+=i 
print s 

輸出: 'nameOfString1,INC_(東西)nameOfString2,INC_(東西)'

現在你可以使用split()

print s.split(',') 
2

可能是你可以嘗試這樣的事情。

[word for word in nastyString.replace("\n", "").replace(",", "").strip().split(' ') if word !=''] 

輸出:

['nameOfString1', 'Inc_(stuff)', 'nameOfString2', 'Inc_(stuff)']