python正则表达式模式以最小的方式获取数字

2024-03-29 05:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试从字符串“at(17.08)”中获取里程和链的整数值。输入数据的假十进制形式由数据管理员选择。首先,我在这个字符串“17.08”上尝试了以下模式:

"((\d+)\.(\d\d))"

这表现正确:

group(0) is "17.08"
group(1) is "17.08"
group(2) is "17"
group(3) is "08"

但是现在对于“at(17.08)是一个”变体:我希望能够用一个格式正确的位置替换“decimal”符号,使用以下模式:

".*\(?((\d+)\.(\d\d))\)?.*"

使用re.match查询时,我得到以下匹配组:

group(0) is "(17.08)", OK.
group(1) is "7.08", where is the 1 going ?
group(2) is "7", where is the 1 going ?
group(3) is "08", still OK.

我做错了什么?为什么“re”的行为是这样的?我有一个想法,这一定与“贪婪”/“非贪婪”主题有关,但如何


Tags: the数据字符串reis管理员模式group
1条回答
网友
1楼 · 发布于 2024-03-29 05:31:47

原因是前缀处的.*\(?部分吸收了输入中的1,因为左括号是可选的,而.*是贪婪的。我解决这个问题的方法是使用以下正则表达式(注意第一个*后面的空格):

".* \(?((\d+)\.(\d\d))\)?.*"

假设在开始括号(如果存在)或数字之前始终有一个空格

相关问题 更多 >