我试图用文字检测时间。一切都很好,除了最后一组是可选的。如果我删除?
- 符号,则适用于该示例。
这是我的正则表达式:^.*?(stell)?.*?(weck).*?(mich)?.*?((\d\d?).*?uhr(.*?(\d\d?))?|(\d\d?)\s*?(stunde|minute).*?((\d\d?)\s*?minute)?).*?$
这是我的例子:
weck mich um 2 uhr
wecke mich in 2 stunden
wecke mich um 15 uhr 13ojhwk
wecke mich in 5 minuten
stelle einen wecker für 5 minuten
stelle einen wecker in 5 stunden
stelle einen wecker für 12 stunden und 10 minuten lksdjglk
stelle einen wecker für 12 minute und 10 minuten lksdjglk
在这里你可以看到,正则表达式在最后两个例子中并不匹配10 minute
的组。有可能告诉?
它应该更喜欢结果吗? (有点奇怪的解释)
答案 0 :(得分:1)
使用可选的非捕获组.*?((\d\d?)\s*?minute)?
包裹(?:.*?((\d\d?)\s*?minute))?
部分:
^.*?(stell)?.*?(weck).*?(mich)?.*?((\d\d?).*?uhr(.*?(\d\d?))?|(\d\d?)\s*?(stunde|minute)(?:.*?((\d\d?)\s*?minute))?).*$
请参阅regex demo。
关键是((\d\d?)\s*?minute)
组在那里成为强制性的,由于应用于该可选组的贪婪?
量词,正则表达式引擎希望在stunde
之后立即匹配它或minute
(以前的强制性团体),所以不能跳过它。