正则表达式

时间:2018-01-15 10:30:00

标签: perl

我在使用正则表达式时遇到问题, 例如:我有这样的事情:

Wynk (* it is a Music online music player ; We can listen a song online and offline *) PAID;
youtube (* it is video player ; we can see the video online and we can download it *) free;

在上面提到的示例中,我需要删除(**) - 分隔的注释并提取数据" Wynk"和"付费"从第一行和" youtube"并且"免费"从第二个开始。

我做过类似的事情

($first_word) =$_ =~ /^\s*(\w+)/; ($last_word) = $_ =~ /(\w+)\s*\;$/;

但是我无法获得与上述示例类似的所有数据的完美结果。

2 个答案:

答案 0 :(得分:0)

您不需要两个正则表达式。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

while (<DATA>) {
  # skip empty lines
  next unless /\S/;

  my ($first, $last) = /\b(\w+)\b.*\b(\w+)\b\s*;/;

  say "$first / $last";
}

__DATA__
Wynk (* it is a Music online music player ; We can listen a song online and offline *) PAID;

youtube (* it is video player ; we can see the video online and we can download it *) free;

输出:

Wynk / PAID
youtube / free

但我认为这与你已经拥有的并没有太大的不同。所以我怀疑你可能需要向我们提供更多有关“完美结果”的详细信息。

答案 1 :(得分:0)

while (<>) {
   chomp;
   s/;\s*\z//;
   my ($id, $status) = /^ (.*) \(\* .* \)\* (.*)/sx
      or die;

   s/^\s+//, s/\s+\z// for $id, $status;

   ...
}

此解决方案适用于Yahoo!Joe's Streaming Service等ID。