2012-03-27 53 views
18

說我有一個字符串如何使用正則表達式在Python中字符可選?

"3434.35353" 

和另一個字符串

"3593" 

如何使一個單一的正則表達式能夠同時匹配有沒有我的模式設置爲別的,如果東西其他失敗?我知道\d+將匹配3593,但它不會做的3434.35353什麼,但(\d+\.\d+)將只匹配了一個與十進制和返回沒有發現對3593匹配。

我希望m.group(1)返回:

"3434.35353" 

"3593" 

回答

32

你可以把?一組字符後,使其可選。

你想要一個點後跟任意數字\.\d+,分組在一起(\.\d+),可選(\.\d+)?。堅持在您的模式:

import re 
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1) 
3434.35353 
print re.match("(\d+(\.\d+)?)", "3434").group(1) 
3434 
1

使用 「一個或零」 的量詞,?。你的正則表達式變成:(\d+(\.\d+)?)。在TextWrangler manual

見第8章關於不同的量詞,以及如何使用它們的更多細節。

3

此正則表達式應該工作:

\d+(\.\d+)? 

它一個或多個數字(\d+)任選後面跟着​​一個點和一個或多個數字((\.\d+)?)相匹配。

0

閱讀上的Python RegEx庫。該鏈接回答您的問題並解釋原因。

然而,匹配一個數字,然後通過更多的數字與可選的小數,你可以使用

re.compile("(\d+(\.\d+)?)") 

在這個例子中,?該.\d+捕獲組之後指定該部分是可選的。

Example

相關問題