正则表达式匹配多个组都是可选的

时间:2013-01-22 11:01:04

标签: regex

输入字符串是“bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla bla” 所有单词在此字符串中都是可选的,可能不会出现。

我想捕获term1,term2,term3的命名组。我尝试了这个正则表达式没有成功:

"(\b1:(?P<one>\w+))?.*?(\b2:(?P<two>\w+))?.*?(\b3:(?P<three>\w+))?"

如果我删除它,它确实有效吗?在每个外部组和所有组都出现在字符串中之后。但我没有让它们成为可选的。 希望得到一些帮助

1 个答案:

答案 0 :(得分:0)

您希望捕获:之后的字词,以便:(\w+)执行此操作:

$ egrep -o ":(\w+)" <<< "bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla bla"
:term1
:term2
:term3

捕获第一组将包含term1,两个term2等..

您可能也对positive lookahead感兴趣:

$ grep -Po "(?<=:)\w+" <<< "bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla"
term1
term2
term3