正则表达式:将可选字符串匹配到组
Regex: Match optional string to group
我有一个描述对象的文件,其中对象的某些属性是可选的。例如(颜色可选):
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 不执行它们。
设置 regex.Multiline = True
并使用以下正则表达式:
^type=dog[\s\S]*?^name=(\w+)(?:(?:(?!^type=)[\s\S])*?^color=(\w+))?
详情
^
- 行首
type=dog
- 一个字符串
[\s\S]*?
- 0 个或更多字符尽可能少
^
- 行首
name=
- 文字字符串
(\w+)
- 第 1 组:任何一个或多个字母、数字或下划线
(?:(?:(?!^type=)[\s\S])*?^color=(\w+))?
- 一个可选的 non-capturing 组匹配 1 次或 0 次出现
(?:(?!^type=)[\s\S])*?
- 任何字符,0 次或更多次,尽可能少,不在行首 type=
子字符串开始
^color=
- color=
子串行首
(\w+)
- 第 2 组:任意一个或多个字母、数字或下划线
我有一个描述对象的文件,其中对象的某些属性是可选的。例如(颜色可选):
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 不执行它们。
设置 regex.Multiline = True
并使用以下正则表达式:
^type=dog[\s\S]*?^name=(\w+)(?:(?:(?!^type=)[\s\S])*?^color=(\w+))?
详情
^
- 行首type=dog
- 一个字符串[\s\S]*?
- 0 个或更多字符尽可能少^
- 行首name=
- 文字字符串(\w+)
- 第 1 组:任何一个或多个字母、数字或下划线(?:(?:(?!^type=)[\s\S])*?^color=(\w+))?
- 一个可选的 non-capturing 组匹配 1 次或 0 次出现(?:(?!^type=)[\s\S])*?
- 任何字符,0 次或更多次,尽可能少,不在行首type=
子字符串开始^color=
-color=
子串行首(\w+)
- 第 2 组:任意一个或多个字母、数字或下划线