說我有一個字符串如何使用正則表達式在Python中字符可選?
"3434.35353"
和另一個字符串
"3593"
如何使一個單一的正則表達式能夠同時匹配有沒有我的模式設置爲別的,如果東西其他失敗?我知道\d+
將匹配3593
,但它不會做的3434.35353
什麼,但(\d+\.\d+
)將只匹配了一個與十進制和返回沒有發現對3593
匹配。
我希望m.group(1)
返回:
"3434.35353"
或
"3593"
說我有一個字符串如何使用正則表達式在Python中字符可選?
"3434.35353"
和另一個字符串
"3593"
如何使一個單一的正則表達式能夠同時匹配有沒有我的模式設置爲別的,如果東西其他失敗?我知道\d+
將匹配3593
,但它不會做的3434.35353
什麼,但(\d+\.\d+
)將只匹配了一個與十進制和返回沒有發現對3593
匹配。
我希望m.group(1)
返回:
"3434.35353"
或
"3593"
你可以把?
一組字符後,使其可選。
你想要一個點後跟任意數字\.\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
使用 「一個或零」 的量詞,?
。你的正則表達式變成:(\d+(\.\d+)?)
。在TextWrangler manual的
見第8章關於不同的量詞,以及如何使用它們的更多細節。
此正則表達式應該工作:
\d+(\.\d+)?
它一個或多個數字(\d+
)任選後面跟着一個點和一個或多個數字((\.\d+)?
)相匹配。
閱讀上的Python RegEx庫。該鏈接回答您的問題並解釋原因。
然而,匹配一個數字,然後通過更多的數字與可選的小數,你可以使用
re.compile("(\d+(\.\d+)?)")
在這個例子中,?該.\d+
捕獲組之後指定該部分是可選的。