如何在python中使用带有可选字符的正则表达式?

Rol*_*ndo 27 python regex

说我有一个字符串

"3434.35353"
Run Code Online (Sandbox Code Playgroud)

和另一个字符串

"3593"
Run Code Online (Sandbox Code Playgroud)

如何创建一个能够匹配两者的正则表达式,而不必在另一个失败的情况下将模式设置为其他模式?我知道\d+会匹配3593,但它不会做任何事情3434.35353,但(\d+\.\d+)只会匹配一个小数,并返回没有找到匹配3593.

我期待m.group(1)回归:

"3434.35353"
Run Code Online (Sandbox Code Playgroud)

要么

"3593"
Run Code Online (Sandbox Code Playgroud)

小智 54

您可以?在一组字符后面添加一个字符以使其可选.

你想要一个点后跟任意数量的数字\.\d+,组合在一起(\.\d+),可选(\.\d+)?.坚持你的模式:

import re
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1)
Run Code Online (Sandbox Code Playgroud)
3434.35353
Run Code Online (Sandbox Code Playgroud)
print re.match("(\d+(\.\d+)?)", "3434").group(1)
Run Code Online (Sandbox Code Playgroud)
3434
Run Code Online (Sandbox Code Playgroud)


Igo*_*hov 5

这个正则表达式应该工作:

\d+(\.\d+)?
Run Code Online (Sandbox Code Playgroud)

它与一个\d+或多个数字((\.\d+)?)匹配,并可选地后跟一个点和一个或多个数字()。