我在regexes很糟糕,但我希望有人能帮我定义一条接受这篇文章的规则:
并返回地址,也就是说,行的其余部分超过1-9.
额外的分数,一个连贯的解释,实际上将有助于我学习一点。
编辑:我将在工作中展示我的工作,直到其他人介入为止。现在我有一个^\d+\.,它是一个起始行,数字,句号。
发布于 2009-12-02 01:47:50
红宝石
mystring="1. Il Cuccio, via Ronchi 43/b, 14047 Mombercelli, Asti. \nTel: 380 7277050 Fax: 0141 959282 E-mail: info@ilcuccio.it www.ilcuccio.it \nAccommodation in communal room or tent. French and English \nspoken. Contact: Cristina Belotti. \n\n2. Apicoltura Leida Barbara, Strada Crevenzolo 21, Viguzzolo, 15058 Alessandria. \nTel: 0131 899166 & 392 9078020 E-mail: barbaraleida@tiscali.it \nThe farm, situated in the plains, is certified organic (CCPB).\n\n"
# scan returns a list like [['addr1'], ['addr2'], ['addr3'], ...]
puts mystring.scan(/^\d+\. (.+)$/)产出:
Il Cuccio, via Ronchi 43/b, 14047 Mombercelli, Asti.
Apicoltura Leida Barbara, Strada Crevenzolo 21, Viguzzolo, 15058 Alessandria. 发布于 2009-12-02 01:19:36
#!/usr/bin/perl
use strict; use warnings;
my $str = <<'EO_STR';
2. Il Cuccio, via Ronchi 43/b, 14047 Mombercelli, Asti.
Tel: 380 7277050 Fax: 0141 959282 E-mail: info@ilcuccio.it www.ilcuccio.it
Accommodation in communal room or tent. French and English
spoken. Contact: Cristina Belotti.
3. Apicoltura Leida Barbara, Strada Crevenzolo 21, Viguzzolo, 15058 Alessandria.
Tel: 0131 899166 & 392 9078020 E-mail: barbaraleida@tiscali.it
The farm, situated in the plains, is certified organic (CCPB).
EO_STR
while ( $str =~ /^[0-9]\. ([^.]+)\./mg ) {
print "$1\n";
}据我所知,地址部分没有出现.。因此,地址是[0-9]\.和下一个时间段之间的部分。因此,上面的表达式捕获了它使用的.修饰符[0-9]\.和\.之间的所有非\.字符,因此^匹配每一行的开头,而不是字符串的开头。它使用g修饰符作为回报,遍历每一次匹配。
如果你只想抓住所有的捕获:
my @addresses = $str =~ /^[0-9]\. ([^.]+)\./mg;
print $_, "\n" for @addresses;发布于 2009-12-02 01:19:36
你想要这样的东西:
/^1-9+。(.*)$/
^表示从行的开头开始。
1-9指的是任何1-9,但我想你已经知道了。
。意思是找到一个。
(.*)应该抓取行中的任何东西,并插入一个变量供您使用。
$表示表达式应该转到行尾。
在perl中,您应该能够从$1中提取地址。
https://stackoverflow.com/questions/1830078
复制相似问题