首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex help:如果一行以1或2开头,则捕获整行。

Regex help:如果一行以1或2开头,则捕获整行。
EN

Stack Overflow用户
提问于 2009-12-02 01:13:14
回答 6查看 480关注 0票数 1

我在regexes很糟糕,但我希望有人能帮我定义一条接受这篇文章的规则:

  1. Cuccio,通过Ronchi 43/b,14047蒙贝切利,阿斯蒂。 电话: 380 7277050传真: 0141 959282电子邮件: info@ilcuccio.it www.ilcuccio.it 公共房间或帐篷内的住宿。法语和英语口语。联系人:克里斯蒂娜·贝洛蒂。
  2. 阿皮科图拉·莱达·芭芭拉,斯特拉达·克莱夫佐洛21岁,维古佐罗,15058·阿莱桑德里亚。 电话: 0131 899166 & 392 9078020电子邮件: barbaraleida@tiscali.it农场位于平原地区,经认证为有机食品.

并返回地址,也就是说,行的其余部分超过1-9.

额外的分数,一个连贯的解释,实际上将有助于我学习一点。

编辑:我将在工作中展示我的工作,直到其他人介入为止。现在我有一个^\d+\.,它是一个起始行,数字,句号。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-02 01:47:50

红宝石

代码语言:javascript
复制
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+\. (.+)$/)

产出:

代码语言:javascript
复制
Il Cuccio, via Ronchi 43/b, 14047 Mombercelli, Asti.  
Apicoltura Leida Barbara, Strada Crevenzolo 21, Viguzzolo, 15058 Alessandria.  
票数 1
EN

Stack Overflow用户

发布于 2009-12-02 01:19:36

代码语言:javascript
复制
#!/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修饰符作为回报,遍历每一次匹配。

如果你只想抓住所有的捕获:

代码语言:javascript
复制
my @addresses = $str =~ /^[0-9]\. ([^.]+)\./mg;

print $_, "\n" for @addresses;
票数 1
EN

Stack Overflow用户

发布于 2009-12-02 01:19:36

你想要这样的东西:

/^1-9+。(.*)$/

^表示从行的开头开始。

1-9指的是任何1-9,但我想你已经知道了。

  • 意味着我们需要多个以前的项目匹配。数字1-9.

。意思是找到一个。

(.*)应该抓取行中的任何东西,并插入一个变量供您使用。

$表示表达式应该转到行尾。

在perl中,您应该能够从$1中提取地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1830078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档