我有幾個正則表達式,例如,看起來像這樣 98374D90 483D39 3843930D393Python的正則表達式 - 刪除所有字符傳遞某個字符
現在我有Python代碼取出所有的人物和保持整數像這樣:
ws = 98374D90
clean = re.sub("\D", "", ws)
這給我留下了9837490但我需要做的是,一旦它到達則丟棄該d,一切就這麼98374D90將導致98374之後的字符「d」我怎麼會做這個?
感謝您的幫助。
我有幾個正則表達式,例如,看起來像這樣 98374D90 483D39 3843930D393Python的正則表達式 - 刪除所有字符傳遞某個字符
現在我有Python代碼取出所有的人物和保持整數像這樣:
ws = 98374D90
clean = re.sub("\D", "", ws)
這給我留下了9837490但我需要做的是,一旦它到達則丟棄該d,一切就這麼98374D90將導致98374之後的字符「d」我怎麼會做這個?
感謝您的幫助。
以下將用空字符串替換任何非數字字符 - 有效地消除字符。
>>> re.sub("\D.*", "", "98374D90")
'98374'
我傾向於使用單引號和原始字符串推薦:
re.sub(r'D.*', '', '98374D90')
這樣可以節省你不必經常逃跑。
當您請求正則表達式時,有時正則表達式只會使事情複雜化(即,如果您無法自己維護它們)。您可以使用更簡單的功能,也許是:
from itertools import takewhile
import string
s = '98374D90'
print ''.join(takewhile(lambda c: c in string.digits, s))
回報
98374
http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html – hexparrot
由於問題是關於字母'D',你可以也使用'lambda c:c!='D'。 – quodlibetor
另一個非正則表達式的解決方案:
>>> s = '98374D90'
>>> s.partition('D')
('98374', 'D', '90')
謝謝!作品完美:) – sean