2015-04-28 41 views
0

我相信這可以用正則表達式bux不能找到正確的語法。取代單個空間,但不是多個空間python

'SYS   W$_FIasdfLESTATXS    TABLE PARTITION   0 ' 

在我的文件中的第三字段有時具有空間分隔輸出需要被轉換爲下劃線分離式輸出,使上述將成爲此。

'SYS   W$_FIasdfLESTATXS    TABLE_PARTITION   0 ' 

第三個字段並不總是相同,但當空間分離時,它將始終有一個空格。這怎麼能在Python中完成?

+0

您可能希望與玩玩具一樣http://rubular.com/練你的正則表達式技巧。 PS回答你的問題是在該網站的工具提示;) –

+0

看到檢查你的語法http://www.regexr.com – Zaaferani

+0

所以如果你這樣做(\ S \ S)你可以得到'EP',但我是在這種情況下,不確定如何引用它以用E_P替換它。有什麼想法嗎? – user1601716

回答

1

這是你想要的正則表達式:s/([^ ]) ([^ ])/\1_\2/g

在Python:

>>> import re 
>>> my_string='SYS   W$_FIasdfLESTATXS    TABLE PARTITION   0 ' 
>>> re.sub(r'([^ ]) ([^ ])',r'\1_\2',my_string) 
'SYS   W$_FIasdfLESTATXS    TABLE_PARTITION   0 ' 
+0

真棒,did not知道如何反向引用那樣,這一個也可以工作re.sub(r'(\ S)(\ S)',r'\ 1_ \ 2',x) – user1601716

+0

您的正則表達式更好地表示爲s /(\ S)\ S(\ S)/ \ 1_ \ 2/g' – dawg

0

使用回顧後和前瞻:

(?<=\w) (?=\w) 

或者

(?<=\S)\s(?=\S) 

Demo

在Python:

>>> s='SYS   W$_FIasdfLESTATXS    TABLE PARTITION   0 ' 
>>> re.sub(r'(?<=\S)\s(?=\S)', '_', s) 
'SYS   W$_FIasdfLESTATXS    TABLE_PARTITION   0 ' 
0

使用這種模式

(?<!) (?!) 

Demo

(?<!   # Negative Look-Behind 
       # " " a white space 
)    # End of Negative Look-Behind 
       # " " a white space 
(?!    # Negative Look-Ahead 
       # " " a white space 
)    # End of Negative Look-Ahead