大家好,这段文本怎么用正则表达式处理啊,没整过去

大家好,这段文本怎么用正则表达式处理啊,没整过去

下面是文件内容

###1234
aaa= 北京 #123456
bbb= 6688 ## 4677

ccc = 沈阳467

我想得到的文本是
aaa= 北京
bbb= 6688
ccc = 沈阳467

还是我昨天发的那个处理ini文件的延续
open (FH, 'C:\final\test\test.ini') or die "aaa";
while(<FH>)
{
   chomp();
   next if(($_ =~ /^\s*$/) || ($_ =~ /^#/));
   ($a) = $_ =~ /^([^#]+)#.*$/;
   print "$a\n";
}
close FH;

这样做不行啊,
C:\final\test>perl test2.pl
aaa= 北京
bbb= 6688


ccc = 沈阳467
整丢了
open (FH, 'C:\final\test\test.ini') or die "aaa";
while(<FH>)
{
   chomp();
   next if(($_ =~ /^\s*$/) || ($_ =~ /^#/));
   if(/#/)
   {
      ($a) = $_ =~ /^([^#]+)#.*$/;
      print "$a\n";
   }
   else
   {
              print "$_\n";
   }
}
close FH;

上面的可以,可是我想用一个正则就解决问题,能行吗?


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
open (FH,"1.txt");
while(<FH>){
$_=~s/\#.*//g;
print "$_","\n";
}
close FH;

要是光处理LZ的情况的话,只要用 $_=~s/(.*?)#(.*)/$1/;    把#后面的去掉就可以了
真高,好用!为啥我用$_=~s/(.+)#(.*)/$1/;不行呢?以前有的网友就用.*?,我一直以为.*?应该和.+等价呢!哪位网友能帮忙解释一下它们之间的区别吗?先谢谢了!


QUOTE:
原帖由 zhangkeyijian 于 2007-9-7 17:36 发表
#!/usr/bin/perl
open (FH,"1.txt");
while(){
$_=~s/\#.*//g;
print "$_","\n";
}
close FH;

zhangkeyijian朋友的也好用,能解释一下为啥用\#吗?我觉得这种用法很好,就是不理解
我试了
$_=~s/#.*//g;
也好用
不加g也好用啊
$_=~s/#.*//;也好用,迷糊了。我学的太浅了

$_=~s/\#.*//g;
不理解,$_=~s/(.+)#(.*)/$1/;也没理解,哪位热心的网友帮忙解释一下吧!!真不好理解

改成这样也行

($a) = $_ =~ /^([^#]+)#?.*$/;
朋友?不是表示它前面的字符重复0次或1次吗?不理解,哪位热心的朋友能解释一下吗?天天盼着呢,急等求解!这几种解决方案都解释解释!先谢谢了