2013-12-19 79 views
-1

我有以下字符串,如何在模式匹配

9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat 

我需要拆分此字符串並保存生成的字符串數組拆分字符串。

生成的字符串將類似於以下內容:

9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 

請有人可以幫助我?

+2

您有任何嘗試嗎? – Jerry

回答

6

您可以使用此正則表達式分裂:

(?<=pat)\s+ 
  • (?<=pat)是回顧後發正則表達式是確保1個或多個空格是由文本字符串開頭pat

例子:

perl -wpe 's/(?<=pat)\s+/\n/g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 
9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 
+0

非常感謝,請您詳細說明正則表達式嗎?我猜這個?<= pat匹配模式pat,然後是\ s(這是爲了分割字符串嗎?) – user2986175

+0

@ user2986175:是的,我在Example之前添加了解釋。 '(?<= pat)是lookbehind模式,可以確保1個或多個空格前面有用於分割的文字字符串「pat」。 – anubhava

3

你可以使用這個固定的「pat」作爲分隔符。

perl -wpe 's/pat\s/pat\n/g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 
9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 

perl -wpe 's|pat\K\s|\n|g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 

perldoc perlre\K環視斷言。

+1

+1。我寧願儘可能避免複雜的正則表達式,這正是您的答案。 – slayedbylucifer