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

时间:2017-10-24 12:52:58

标签: regex regex-lookarounds

我有以下正则表达式

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

这允许我匹配以下字符串格式或其变体,并将 s: d:术语后面的数字放入 src <组中/ em>和 dest

OUT MYTYPE s:12 d:3

我想编辑我的正则表达式,因此如果这些术语中的一个或多个不存在,它仍将匹配。即。

OUT MYTYPE s:12

仍然会匹配,而 src 组仍然会包含12,那就不会是 dest 组。

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

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

测试HERE

- - - - 修改 -----

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

1 个答案:

答案 0 :(得分:1)

这应该做你想做的事情:

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

现场演示here