2016-03-02 145 views
1

有人可以請幫我這一個在Python,我有一個字符串,它看起來像這樣:Python的解析字符串

Comm IF Ver 1.18c Port TCP-1 
>R5281H0000 
>L0121 @g 
>E0042A1204C0000 
>[email protected]@L0121 @g 
>S0339E1512 
> 

我想獲得從輸出的字符串應該是這樣的:

R5281H0000 L0121 @g E0042A1204C0000 [email protected]@L0121 @g S0339E1512 
+0

這是從一個文件?或者有很多行的字符串? – Ian

+0

它與6號線的字符串,所以string.count(「\ n」)給出的6 – Dominik

+0

的結果,因爲我看到7號線這是不可思議? – Dominik

回答

0

假設這是一個string

a = " \ 
    Comm IF Ver 1.18c Port TCP- \ 
    >R5281H0000 \ 
    >L0121 @g \ 
    >E0042A1204C0000 \ 
    >[email protected]@L0121 @g \ 
    >S0339E1512 \ 
    >" 

考慮使用split得到你的結果

b = a.split('>')[1:-1] #1 is to exclude the first one, -1 to exclude the last one 

產生與你想要的元素列表。

如果你想將它們組合成一些空格的string,使用join

c = " ".join(b) 

編輯一步一步的解釋:

什麼split確實是「分裂」的字符串根據其分隔符轉換爲substrings。在這種情況下,分隔符是>,從而改變了長長的一串:

a = " \ 
    Comm IF Ver 1.18c Port TCP- \ 
    >R5281H0000 \ 
    >L0121 @g \ 
    >E0042A1204C0000 \ 
    >[email protected]@L0121 @g \ 
    >S0339E1512 \ 
    >" 

到具有以下元素的字符串列表:

'Comm IF Ver 1.18c Port TCP-' #element no 0 
'R5281H0000' #no 1 
'L0121 @g' #no 2 
'E0042A1204C0000' #no 3 
'[email protected]@L0121 @g' #no 4 
'S0339E1512' #no 5 
'' #no 6 

然後,當你使用切片索引[1:-1],你砍關閉第一和最後一個元素:

'below is b 

'R5281H0000' #no 0, previously 1 
'L0121 @g' #no 1, previously 2 
'E0042A1204C0000' #no 2, previously 3 
'[email protected]@L0121 @g' #no 3, previously 4 
'S0339E1512' #no 4, previously 5 

於是最後,join將列表中的這些字符串回一個字符串通過空間" "

R5281H0000  L0121 @g  E0042A1204C0000  [email protected]@L0121 @g  S0339E1512  
+0

能否請您給我解釋一下究竟B = a.split(「>」)[1:-1]的作品,它是做我想要什麼,但只是想看看它是如何做的呢? – Dominik

+0

@Dominik解釋。希望它能讓你更好地理解。 :) – Ian

+0

我仍然在每行的結尾有新行? \ r \ n – Dominik

0

分開我收集的是,你要加入的每個與>有三個空格開頭行,但不包括>。以下是如何做到這一點:

print(" ".join(s.lstrip(">") for s in string if s.startswith(">")))