2014-09-25 59 views
2

我有bytes'foo\x20\x20\x08\x08bar'如何在Python中評估退格?

我需要具有退格('\x08')來評價時,只有當它們通過的空間相同數目('\x20')引線。

x = re.sub('\x20+\x08+', '', t)是這樣做的簡單的方式,但是不能產生正確的輸出時t = 'foo\x20\x20\x08'

有一種方法以定義正則表達式匹配的第二組時,需要一個前一組的長度在給帳戶或者我需要手動執行此操作與re.finditer & re.span()然後手動重新檢查前面的塊嗎?

回答

2

另一種方法是通過一個lambdare.sub

>>> pat ='(\x20+)(\x08+)' 
>>> repl = lambda m: m.group(1)[:-len(m.group(2))] 

現在:

>>> re.sub(pat, repl, 'foo\x20\x20\x08bar') 
'foo bar' 
>>> re.sub(pat, repl, 'foo\x20\x20\x08\x08bar') 
'foobar' 
>>> re.sub(pat, repl, 'foo\x20\x20\x08\x08\x08bar') 
'foobar' 
+0

你能解釋一下你的代碼位。 – vks 2014-09-25 12:57:52

+0

@vks參見['re.sub'](https://docs.python.org/3/library/re.html#re.sub)以及第二個示例。 'repl'參數可以是接收[匹配對象](https://docs.python.org/3/library/re.html#match-objects)並返回字符串的函數。 – 2014-09-25 13:03:17

+0

,我知道了。我已經使用過它,lambda的使用有點令人困惑。還有什麼時候必須放置空間? – vks 2014-09-25 13:05:00