1

输入字符串为“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+))?"

如果我删除它实际上有效?在每个外部组之后,所有组都存在于字符串中。但我没有让它们成为可选的。将不胜感激一些帮助

4

1 回答 1

0

您想捕获以下单词:,因此:(\w+)可以这样做:

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

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

您可能还对积极的前瞻感兴趣:

$ grep -Po "(?<=:)\w+" <<< "bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla"
term1
term2
term3
于 2013-01-22T11:10:55.630 回答