首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用前瞻和后视(perl)

使用前瞻和后视(perl)
EN

Stack Overflow用户
提问于 2011-09-12 02:31:03
回答 2查看 1.4K关注 0票数 2

我想用perl代码拆分这种类型的代码:

代码语言:javascript
复制
my $my_town = Madrid(32): Villa de Madrid (ES) Royal Palace of Madrid (Teatro Real)

至:

代码语言:javascript
复制
Madrid(32):
Villa de Madrid (ES)
Royal Palace of Madrid (Teatro Real)

我试过了:

代码语言:javascript
复制
my @travel = split(/(?<=\))\s*/, $my_town);

但输出结果为:

代码语言:javascript
复制
Madrid(32)
: Villa de Madrid (ES)
Royal Palace of Madrid (Teatro Real)

请帮我个小忙。

有没有办法让函数")“返回更少的第一个字符?":Villa de马德里(ES)”没有第一个字符串":",“皇家马德里宫殿(Teatro Real)”没有第一个字符串“空白”,...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-12 02:37:22

split可以完成这项工作

代码语言:javascript
复制
my @matches = split(
   qr/
      (?: (?<= \) : ) 
      |   (?<= \) (?! : ) )
      )
      \s*
   /x,
   $my_town,
);

但由于在我看来,输入并不像是一个统一分隔的列表,所以我认为它不适合这项工作。请注意,转向解析器是多么简单:

代码语言:javascript
复制
my @matches = $my_town =~ / \S .*? \( [^)]+ \) :? /xgs;
票数 3
EN

Stack Overflow用户

发布于 2011-09-12 03:42:05

不是一种非常科学的方法来分割一条线。

代码语言:javascript
复制
use strict;
use warnings;

my $my_town = 'Madrid(32): Villa de Madrid (ES) Royal Palace of Madrid (Teatro Real)  ';
my @travel = split( / (?<=\)):? \s* /x  , $my_town );

for (@travel) {
   print "'$_'\n";
}

“马德里(32)”

‘'Villa de马德里(ES)’

“马德里皇宫(Teatro Real)”

**编辑**

我不知道为什么,但是如果你只是在努力解决可变长度的后视问题

并希望了解如何将可选的冒号:作为拆分的一部分

你可以这样做:

代码语言:javascript
复制
my @travel = split( / (?:(?<=\):)|(?<=\))(?!:)) \s* /x  , $my_town );

‘马德里(32):’

‘'Villa de马德里(ES)’

“马德里皇宫(Teatro Real)”

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

https://stackoverflow.com/questions/7380384

复制
相关文章

相似问题

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