2017-03-15 134 views
-1

我初出茅廬用正則表達式和需要知道的格式如下: 我有一句話:正則表達式替換「1-3」與「從1到3」格式

「重複這些步驟1次-3次,並宣讀其次100-150個俯臥撐的章節10-12「

我怎樣替換此:

」從1到3次重複這些步驟,並閱讀10章到12,接着從100至150俯臥撐」

所以,我試圖使用來識別的格式‘數字位’的正則表達式如下:

r'\d\D\d' 

其中\ D的代表單個數字和\ D代表非數字。 但這僅標識「1-3」 ...我怎樣才能得到一個正則表達式,將採取任何數量從1-1000,然後連字符? 總的來說我怎麼更換任何數字,後跟一個連字符與「自爲」的格式上面顯示?

+0

的可能的複製[替換使用應用re.sub人物 - 保持一個字符(http://stackoverflow.com /問題/ 29450475 /替換字符,使用,再分保一個字符) – spicypumpkin

回答

4

您可以使用\d+來匹配多個數字,這裏+意味着一個或多個;然後你就可以捕捉括號中的數字模式,使用反向引用重新格式化模式你需要的方式:

import re 
re.sub(r"(\d+)-(\d+)", r"from \1 to \2", "Repeat these steps 1-3 times and read the chapters 10-12 followed by 100-150 push-ups") 
# 'Repeat these steps from 1 to 3 times and read the chapters from 10 to 12 followed by from 100 to 150 push-ups' 

更嚴格的量詞比+可能是{1,4},其中一至四位匹配的評論由@NolenRoyalty。所以你可以根據你的需要使用(\d{1,4})-(\d{1,4})

+1

'{1,4}'可能比更合適的'+',因爲用戶要求「任何數量從1-1000」 (當然更一般的這個答案是正確的) –

1

您必須添加像+一個量詞,這意味着1 *倍。 r'\d+\D\d+'

或者作爲@Nolen版稅建議使用{1,4}r'\d{1,4}\D\d{1,4}所以你只允許1到4位