2012-11-19 102 views
3

我想刪除包含數字,實例的所有單詞:正則表達式替換混合數字+字符串

LW23 London W98 String 

從上面我想保持唯一的字符串是"London String"。這可以用正則表達式來完成。

我目前使用Python,但PHP代碼也很好。

謝謝!

編輯:

這裏是我可以現在做的事:

>>> a = "LW23 London W98 String" 
>>> b = a.split(' ') 
>>> a 
['LW23', 'London', 'W98', 'String'] 
+0

[正則表達式來刪除一個句子包含數字的所有單詞(http://stackoverflow.com/questions/11024174/regex-to-de lete-all-words-containing-numbers-from-a-sentence) – F0G

回答

6

是的,你可以:

result = re.sub(
    r"""(?x) # verbose regex 
    \b # Start of word 
    (?= # Look ahead to ensure that this word contains... 
    \w* # (after any number of alphanumeric characters) 
    \d # ...at least one digit. 
    )  # End of lookahead 
    \w+ # Match the alphanumeric word 
    \s* # Match any following whitespace""", 
    "", subject) 
+0

謝謝!這是我一直在尋找的解決方案。 – dark4p

3

你可以嘗試這種模式一的preg_replace:

/(\w*\d+\w*)/ 

類似$esc_string = preg_replace('/(\w*\d+\w*)/', '', $old_string);

1

我不是100%確定,這只是一個可能的解決方案的建議,我不是一個Python大師,但如果我看到完整的代碼,我可能會有更好的想法。

我的建議是將字符串的部分添加到列表中,彈出每個單詞並使用,如果函數檢查數字並刪除它們,如果它們包含數字並將它們添加到新列表中,如果它們不,那麼您可以重新排列列表以按照適當的順序排列單詞。

對不起,如果這沒有幫助,我只知道,如果我遇到了問題,這種解決方案就是我要開始的地方。

+0

由於這是你的第一個答案,我會給你+1,但是爲了將來,發佈一些工作代碼,而不是描述你將如何做到這一點。 – georg

0

可以將包含數字的單詞匹配

/\w*\d+\w*/ 

,或者你可以匹配所有沒有數字的話(並保持)

/\w+/ 
+0

'\ w'匹配的是數字 – SilentGhost

1

你可以用正則表達式加理解這樣做:

clean = [w for w in test.split(' ') if not re.search("\d", w)] 

words = test.split(' ') 
regex = re.compile("\d") 
clean = [w for w in words if not regex.search(w) ] 

輸入:

"LW23 London W98 String X5Y 99AP Okay" 

輸出:

['London', 'String', 'Okay'] 
2

要看什麼是「字」是我猜的,但如果我們談論的空格作爲分隔符,如果沒有是一個正則表達式:

>>> ' '.join(filter(str.isalpha, a.split())) 
'London String' 
+0

上逗號此軸承座 – SilentGhost

+0

@SilentGhost它確實是這樣 - 好對象 - 我是專注於例如串 - 過失 –

+0

的問題並沒有說明什麼punctation - 應該發生'LW23什麼,倫敦'例如?只要只有空白,這對我來說是最好的答案。 – georg