编辑正则表达式,以便在未出现分组项目时仍然存在匹配项

Edit regex so there is still a match when a grouped item DOESN'T appear

我有以下正则表达式

(OUT|IN) (?P<typ>\D+?)(?=.*\bd:(?P<dest>\d+)\b)(?=.*\bs:(?P<src>\d+)\b) 

这允许我匹配以下字符串格式或其变体,并将数字放在 s:d: 之后术语分组 srcdest:

OUT MYTYPE s:12 d:3

我想编辑我的正则表达式,以便在这些术语中的一个或多个不存在时它仍然匹配。即

OUT MYTYPE s:12

仍然匹配,组 src 仍然包含 12,只是不会有 dest 组。

我尝试将 ? 放在单词边界的末尾,但出现错误:

(?=.*\bs:(?P<src>\d+)\b)? 

测试HERE

-----编辑-----

这个问题的早期版本包括组内的数字。正如@Ashish_Ranjan 正确指出的那样,这需要 [^\d\s]+ 而不是 \D+

这应该可以满足您的要求:

(OUT|IN) (?P<typ>\S+)\s+[s:]{0,}(?P<dest>\d*)\s*[d:]{0,}(?P<src>\d*)

现场演示here