【发布时间】:2020-08-17 10:19:12
【问题描述】:
我有一个描述对象的文件,其中对象的某些属性是可选的。例如(颜色可选):
type=dog
sex=male
name=wolf
color=brown
type=dog
sex=male
name=bob
type=cat
sex=male
name=tom
color=black
type=dog
sex=female
name=simona
color=white
我正在寻找一个正则表达式,它可以为我提供一对狗“名字”-“颜色”的属性。我正在等待这样的事情:
wolf - brown
bob -
simona - white
我开始了
type=dog[\s\S]*?name=(\w+)[\s\S]*?color=(\w+)
哪个出错了:
wolf - brown
bob - black
simona - white
然后我从颜色组(给出相同的)并添加“?”量词:
type=dog[\s\S]*?name=(\w+)[\s\S]*?(color=(\w+))?
但是,我在所有比赛中输掉了第二组,而不是预期的结果:
wolf -
bob -
simona -
我的表达有什么问题以及如何实现我的目标。请不要使用 Lookbehind、Lookahead 和 Conditionals。 VBScript 没有实现它们。
【问题讨论】:
-
VBScript 正则表达式支持前瞻。试试
^type=dog[\s\S]*?^name=(\w+)(?:(?:(?!^type=)[\s\S])*?^color=(\w+))?和regex.Multiline = True。见this regex demo。 -
看来,你是绝对正确的@WiktorStribiżew。顺便说一句,我对你的答案数量感到非常惊讶。
标签: regex vbscript regex-group optional-values