编辑正则表达式,以便在未出现分组项目时仍然存在匹配项
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: 之后术语分组 src 和 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+
这应该可以满足您的要求:
(OUT|IN) (?P<typ>\S+)\s+[s:]{0,}(?P<dest>\d*)\s*[d:]{0,}(?P<src>\d*)
现场演示here
我有以下正则表达式
(OUT|IN) (?P<typ>\D+?)(?=.*\bd:(?P<dest>\d+)\b)(?=.*\bs:(?P<src>\d+)\b)
这允许我匹配以下字符串格式或其变体,并将数字放在 s: 和 d: 之后术语分组 src 和 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+
这应该可以满足您的要求:
(OUT|IN) (?P<typ>\S+)\s+[s:]{0,}(?P<dest>\d*)\s*[d:]{0,}(?P<src>\d*)
现场演示here