我尝试从字符串“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”的行为是这样的?我有一个想法,这一定与“贪婪”/“非贪婪”主题有关,但如何
原因是前缀处的
.*\(?
部分吸收了输入中的1
,因为左括号是可选的,而.*
是贪婪的。我解决这个问题的方法是使用以下正则表达式(注意第一个*
后面的空格):".* \(?((\d+)\.(\d\d))\)?.*"
假设在开始括号(如果存在)或数字之前始终有一个空格
相关问题 更多 >
编程相关推荐