【发布时间】:2019-11-25 14:01:21
【问题描述】:
我需要一些帮助来纠正我的 RegEx 字符串 - 我有一个文本字符串(一大段 HTML),我需要获取这个 HTML 字符串,然后对其进行模式匹配,以便我拥有 data 987654322@ inside'<div>标签可以提取使用。
我们以<div id=1>的测试用例为例
<div id=1>UID:1currentPartNumber:63222TRES003H1workcenter:VLCSKDcycleTime:98.8curPartCycleTime:63.66partsMade:233curCycleTimeActual:62.4target:291actual:233downtime:97statusReason:lineStatus:Productionefficiency:80.05plusminus:-260curProdTime:7/16/2019 12:28:01 PM</div>
需要注意的是lineStatus可以有值也可以为空,比如statusReason一样
我能够提出一个可以完成大部分工作的正则表达式,但我正在努力处理不存在值的情况。
这是我的尝试:
(
(<div id=(\d|\d\d)>)
(UID:(\d|\d\d))
(currentPartNumber:(.{1,20}))
(workcenter:(.{1,20}))
(cycleTime:(.{1,6}))
(curPartCycleTime:(.{1,6}))
(partsMade:(.{1,6}))
(CycleTimeActual:(.{1,6}))
(target:(.{1,6}))
(actual:(.{1,6}))
(downtime:(.{1,6}))
((statusReason:((?:.)|(.{1,6}))))
((lineStatus:((?:.)|(.{1,6}))))
(Productionefficiency:(.{1,6}))
(plusminus:(.{1,6}))
(curProdTime:(.{1,30}))
)
为了可读性将其拆分。
谢谢,
【问题讨论】:
-
我认为一个大问题是
(currentPartNumber:(.{1,20})捕获太多,因为workcenter出现在第 20 位之前。其他比赛可能也是如此。 -
感谢您的输入,尽管捕获组不会在另一个开始时停止吗?基本上我这样做
{1,20}的唯一原因是因为另一个闭包组将在匹配后一个闭包组后停止比赛?? -
嗯,你是对的。我忘记了那个方便的功能。