2013-12-19 83 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