请问如何去除两字人名字符中间的空格

请问如何去除两字人名字符中间的空格

比如 :张三而 李  四  王琦大  吴 天 陈  王
          周  一  王哈哈

想要得到
          张三而 李四  王琦大  吴天 陈王
          周一  王哈哈

请高手赐教,谢谢

李 四  中间的空格为啥不去掉?
王琦大  吴天  2个人名中间也是由空格分隔的?


QUOTE:
原帖由 ly5066113 于 2008-12-25 17:57 发表
李 四  中间的空格为啥不去掉?
王琦大  吴天  2个人名中间也是由空格分隔的?

也应去掉,sorry


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w
#Encoding=utf-8

while (<DATA>) {
    s/\s+// if /^[^ ]{3} /;

    s/([^ ]+)\s+([^ ]{3})\s+/$1 $2/g;

    print;
}
__DATA__
张三而 李  四  王琦大  吴 天 陈  王 周  一  王哈哈 张三而 李  四  王琦大  吴 天 陈  王
张三而 李  四  吴 天 王琦大  吴 天 陈  王 周  一  王哈哈 张三而 李  四  王琦大  吴 天 陈  王
张三而 李  四  王琦大  吴天 陈  王 周  一  王哈哈 李  四  王琦大  吴 天 陈  王
周  一  王哈哈 张三而 李  四  王琦大  吴 天 陈  王



QUOTE:
./name
张三而 李四  王琦大 吴天 陈王 周一  王哈哈 张三而 李四  王琦大 吴天 陈王
张三而 李四 吴天 王琦大 吴天 陈王 周一  王哈哈 张三而 李四  王琦大 吴天 陈王
张三而 李四  王琦大  吴天 陈王 周一  王哈哈 李四  王琦大 吴天 陈王
周一  王哈哈 张三而 李四  王琦大 吴天 陈王



QUOTE:
原帖由 ynchnluiti 于 2008-12-25 19:28 发表

#!/usr/bin/perl -w
#Encoding=utf-8

while () {
    s/\s+// if /^[^ ]{3} /;

    s/([^ ]+)\s+([^ ]{3})\s+/$1 $2/g;

    print;
}
__DATA__
张三而 李  四  王琦大  吴 天 陈  王 周  一  王 ...

谢谢,不过用你的程序在我这边运行之后结果不正确,自己用比较笨的方法写了一个程序

while(<>){
@name=split (" ",$_);

my $i=0;
while ($i <=$#name){
        $length=length($name[$i])/2;
        if ($length>1) {
                print "$name[$i] ";
                }
        elsif($length=1){
                print  "$name[$i]$name[$i+1] " ;
                 $i+=1;

        }
        $i+=1;
}
print  "\n";
}


QUOTE:
原帖由 jetgm 于 2008-12-26 10:16 发表


谢谢,不过用你的程序在我这边运行之后结果不正确,自己用比较笨的方法写了一个程序

while(){
@name=split (" ",$_);

my $i=0;
while ($i 1) {
                print "$name[$i] ";
                }
        elsif($length=1){
...

前面的程序对格式有要求,不通用。

你这个办法不错。
如下面的名字的话,
李   四
分割@name=split (" ",$_);之后@name的元素是[李],[四],
而不是[李],[ ],[四],动手执行前自己理解有误了,为什么这样啊



QUOTE:
原帖由 HawaiiLeo 于 2008-12-26 11:38 发表
如下面的名字的话,
李   四
分割@name=split (" ",$_);之后@name的元素是[李],[四],
而不是[李],[ ],[四],动手执行前自己理解有误了,为什么这样啊

perldoc -f split

QUOTE:
As a special case, specifying a PATTERN of space (' ') will split on white space just as "split" with no arguments does.  Thus, "split(' ')" can be used to emulate awk's default behavior, whereas "split(/ /)" will give you as many null initial fields as there are leading spaces.  A "split" on "/\s+/" is like a "split(' ')" except that any leading whitespace produces a null first field.  A "split" with no arguments really does a "split(' ', $_)" internally.

有一个特殊的情况,如果该表达式是一个空格(“ ”),那么该函数会象没有参数的 split 那样在空格上把字串分裂开。因此 split(" ") 可以用于模拟 awk 的缺省行为。相反,split(/ /)将给你和前导空格一样多的空的初始化域。(除了这个特殊的例子以外,如果你提供的是一个字串而不是一个正则表达式,那么它还是会被解释成一个正则表达式。)