输入字符串是“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+))?"
如果我删除它,它确实有效吗?在每个外部组和所有组都出现在字符串中之后。但我没有让它们成为可选的。 希望得到一些帮助
答案 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