swift - 正则表达式:捕获组和空字段(SWIFT 5 | ICU 正则表达式引擎)

标签 swift regex icu

我需要一些帮助来更正我的 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/

相关文章:

swift - 如何在不丢失导航栏 UI 的情况下更改我的 SwiftUI 背景?

json - 带有保护语句的 Swift 解析字典

java - 使用ICU将拼出的数字(字符串)转换为整数

regex - 如何使用正则表达式提取 URL 的子字符串

java - 如何使用 icu4j Charset 实现和 CharsetDecoderICU?

php - 在 xampp 中更新 ICU 扩展?

ios - 我怎样才能快速洗牌 RLMResults ?

ios - 尝试用 Swift 协议(protocol)理解一些东西

python - 给出起始字符时搜索速度变慢是违反直觉的

javascript - 正斜杠被替换为 : %252F in AngularJS