我想用perl代码拆分这种类型的代码:
my $my_town = Madrid(32): Villa de Madrid (ES) Royal Palace of Madrid (Teatro Real)至:
Madrid(32):
Villa de Madrid (ES)
Royal Palace of Madrid (Teatro Real)我试过了:
my @travel = split(/(?<=\))\s*/, $my_town);但输出结果为:
Madrid(32)
: Villa de Madrid (ES)
Royal Palace of Madrid (Teatro Real)请帮我个小忙。
有没有办法让函数")“返回更少的第一个字符?":Villa de马德里(ES)”没有第一个字符串":",“皇家马德里宫殿(Teatro Real)”没有第一个字符串“空白”,...
发布于 2011-09-12 02:37:22
split可以完成这项工作
my @matches = split(
qr/
(?: (?<= \) : )
| (?<= \) (?! : ) )
)
\s*
/x,
$my_town,
);但由于在我看来,输入并不像是一个统一分隔的列表,所以我认为它不适合这项工作。请注意,转向解析器是多么简单:
my @matches = $my_town =~ / \S .*? \( [^)]+ \) :? /xgs;发布于 2011-09-12 03:42:05
不是一种非常科学的方法来分割一条线。
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)”
**编辑**
我不知道为什么,但是如果你只是在努力解决可变长度的后视问题
并希望了解如何将可选的冒号:作为拆分的一部分
你可以这样做:
my @travel = split( / (?:(?<=\):)|(?<=\))(?!:)) \s* /x , $my_town );‘马德里(32):’
‘'Villa de马德里(ES)’
“马德里皇宫(Teatro Real)”
https://stackoverflow.com/questions/7380384
复制相似问题