2013-02-17 110 views
-1

究竟这段代码是干什么的,什么是perl的S *的意思意思,有没有其他的方式来编写代码。请解释的Perl代码

my $group = join('","', split(/,\s*/, $tmp[4])) 
+5

这甚至不是完整的行。你能至少完成它吗? – 2013-02-17 21:10:51

+0

Rohit在正则表达式中解释s *的含义,您不需要全行... my $ group = join('','',split(/,\ s * /,$ genetic_codes [4]));任何方式,这是全线.... – user2079657 2013-02-17 21:31:32

+0

是的。但你应该总是在SO上发布可编译的代码。这就是为什么我要求你完成它。 – 2013-02-17 21:32:42

回答

7

,\s*regular expression pattern匹配字符串开始,接着是零个或更多个(*)空格字符(\s)逗号(,)。

split使用此模式来确定要考虑它应该分裂的分隔符。例如,对于该模式,将字符串foo,bar, baz分成了三根弦foobarbaz

下面是什么的Perl 5.14.2和Unicode 6.0.0考虑空格字符:

  • U + 00009 CHARACTER TABULATION
  • U + 0000A换行(LF)
  • U + 0000C FORM FEED(FF)
  • U + 0000D回车(CR)
  • U + 00020 SPACE
  • U + 00085 NEXT LINE(NEL)
  • U + 000A0 NO-BREAK SPACE
  • U + 01680欧甘文SPACE MARK
  • U + 0180E MONGOLIAN VOWEL SEPARATOR
  • U + 02000 EN QUAD
  • U + 02001 EM QUAD
  • U + 02002 EN SPACE
  • U + 02003 EM SPACE
  • U + 02004 THREE-PER-EM SPACE
  • U + 02005 FOUR-PER-EM SPACE
  • U + 02006 SIX-PER-EM SPACE
  • U + 02007图SPACE
  • U + 02008标点空格
  • U + 02009狭窄的空间
  • U + 0200A HAIR SPACE
  • U + 02028行分隔符
  • ü 02029段落分隔
  • U + 0202F窄的无中断SPACE
  • U + 0205F MEDIUM数学SPACE
  • U + 03000表意文字SPACE
+0

非常感谢ikegami ... – user2079657 2013-02-17 21:29:31

+0

更新了我的答案,包括对你所问的模式的作用的解释。 – ikegami 2013-02-17 21:53:12

1

假设你的代码时,编译样子:

my $test = "abc, xyz, mno"; 
print join('","', split(/,\s*/, $test)); 

它可以重新写为:

my $test = "abc, xyz, mno"; 
my @tokens = split /,\s*/, $test; # split $test on `,\s*` 
print join '","', @tokens;   # Join the array back on `","`. 

什么是regex手段已经被@ikegami在解释他的回答。

请记住,您可以在omit的括号中更改Perl中的含义。

+0

感谢Rohit澄清,我现在明白了...... – user2079657 2013-02-17 21:36:47

+0

@ user2079657。不客气:) – 2013-02-17 21:38:00

1

这就是此行的一部分,从一个回答您的previous question

my $group = join('","',split(/,\s*/,$tmp[4])) 

我认为这是更好写成

my $group = join ', ', map qq{"$_"}, $tmp[4] =~ /[^\s,]/g; 

正则表达式翻出那大家还不字符的所有组t空白或逗号,所以当应用于字符串TTT, TTC时,结果为TTTTTCmap在每个项目周围放置双引号。 join将它们全部加入到单个字符串中,由,分隔。这给了"TTT", "TTC"

您是否阅读了我对前两个问题的回答?唯一的问题似乎是你不想安装一个模块,而且我已经为这种情况写了一个替代方案。

+0

为什么这比拆分解决方案更好。对我来说似乎更加复杂。 – justintime 2013-02-17 23:35:36

+0

@justintime:这是一个有趣的问题,但我认为将每个元素都用引号括起来,然后用逗号分隔,而不是用引号,逗号,引号将它们分开。 – Borodin 2013-02-18 01:16:21

0

我同意Rohl Jain。它是一个代码片段。我想出了一个案例。

my $line = 'a,b, c, d,e'; 
my $newline = '"'.join('","',split(/,\s*/,$line)).'"'; 
print $newline; 

这是输出。 “a”,“b”,“c”,“d”,“e”

它需要一行逗号分隔的数据,删除空格填充,并创建一个逗号分隔的行和双引号封装。注意我在行的开头和结尾添加了双引号。