Python正则表达式仅捕获第一次出现的数字匹配

时间:2016-01-29 22:55:02

标签: python regex

我使用了一个简单的python正则表达式,如value="(.+?)"来捕获我的xml数据中的值,只是为了实现输出有字符串&数字范围,扰乱了下游的数据处理。我只需要捕获数值。当有一个像" 19-20" 的范围时,我想只捕获19个。

示例数据:

value="19-20"
value="19.984"
value="slow"
value="19.99kg/m2"
value="107"
value="221lb"

这是我能得到的最接近的

我的部分工作regex1:

value="([0-9]{1,3})|([0-9]{1,3}\.[0-9]{1,2})"

我的部分工作regex2:

value="(.+?)(?:kg/m2|lb)?"

这就是我在输出中难以获得的东西

Match1: 19
Match2: 19.984
Match3: Null (or empty)
Match4: 19.99
Match5: 107
Match6: 221

3 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式:

\bvalue="(\d+(?:\.\d+)?)

并从捕获的组#1中获取值

(\d+(?:\.\d+)?)匹配1个或更多个数字,后跟可选部分,即十进制和十进制数字。

RegEx Demo

Code Demo

答案 1 :(得分:0)

这似乎有效:

import re

tests = ['value="19-20"',
'value="19.984"',
'value="slow"',
'value="19.99kg/m2"',
'value="107"',
'value="221lb"']


for txt in tests:
    print re.findall(r'value="([\d][\d\.]*)', txt)

答案 2 :(得分:0)

根据预期的OP 6匹配,Match3 = Null
使用这种模式

^value="((?:\d+(?:\.\d+)?)?)

Demo