我需要一些帮助来更正我的 RegEx 字符串 - 我有一个文本字符串(一大段 HTML),我需要获取这个 HTML 字符串,然后对其进行模式匹配,以便 data
我有 nested
内'<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}))
)
为了便于阅读,将其拆分。
谢谢,
最佳答案
你们非常非常亲密。
如果您使用:
(
(<div id=\d{1,2}>)
(UID:\d{1,2})
(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:(.{0,6}))
(lineStatus:(.{0,6}))
(Productionefficiency:(.{1,6}))
(plusminus:(.{1,6}))
(curProdTime:(.{1,30}))
(<\/div>)
)
然后$3\n$4\n$6\n$8\n$10\n$12\n$14\n$16\n$18\n$20\n$22\n$24\n$26\n$28\n$30
将是:
UID:1
currentPartNumber:63222TRES003H1
workcenter:VLCSKD
cycleTime:98.8
curPartCycleTime:63.66
partsMade:233cur
CycleTimeActual:62.4
target:291
actual:233
downtime:97
statusReason:
lineStatus:
Productionefficiency:80.05
plusminus:-260
curProdTime:7/16/2019 12:28:01 PM
通过使用 (statusReason:(.{0,6}))(lineStatus:(.{0,6}))
您使 statusReason 和 lineStatus 的值真正可选。
我还简化了开始<div>
和 UID 检测。
关于swift - 正则表达式:捕获组和空字段(SWIFT 5 | ICU 正则表达式引擎),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063936/