Regex Perl正则表达式模式
我有一些数据如下:Regex Perl正则表达式模式,regex,perl,Regex,Perl,我有一些数据如下: TYPE: Travel ADDRESS Barcelona Paris 所以,地址可以是1个或多个,我需要丢弃地址,只获取这些城市。由于某种原因,我的解析失败,只打印了地址以生成正确的结果。我是否遗漏了什么 elsif (/^ADDRESS/) { my @address_t = split /[no matter what i put,only ADDRESS is printed]+/, $_; shift @address_t; #
TYPE: Travel
ADDRESS
Barcelona
Paris
所以,地址可以是1个或多个,我需要丢弃地址,只获取这些城市。由于某种原因,我的解析失败,只打印了地址以生成正确的结果。我是否遗漏了什么
elsif (/^ADDRESS/) {
my @address_t = split /[no matter what i put,only ADDRESS is printed]+/, $_;
shift @address_t; #is this how i will discard ADDRESS ?
foreach my $address (@address_t) {
@address_names = ($address);
}
我认为正则表达式应该被拆分成新行,空格
这是我处理类型的方式:
elsif (/^TYPE/) {
my @type_t = split '\s', $_;
$type = $type_tmp[1];
print "$type" ; #to test, but i have a hashmap which i load them in and print at the end of the file.
谢谢试试这样的方法: 如果前一行与/^ADDRESS/匹配,它将打印行。如果你想停下来,请告诉我,我可以调整
use warnings;
use strict;
my $current_line = "";
my $line_count = 0;
while (<IN>){
chomp;
my $previous_line = $current_line;
$current_line = $_;
if ($previous_line =~ /^ADDRESS/ or $line_count > 0 ){
$line_count++;
print "$current_line\n"
}
}
if/elsif是否有一个循环?你有内存中的所有数据还是只有一行?我在foreach循环中有一个print语句,我在这篇文章中测试过它。通常我以散列方式加载数据。但我还没到那里,因为简单的打印语句并不能满足我的需求。循环给出Address的次数与文本文件中的次数相同感谢您的回复和时间。有没有什么方法可以让你根据我已经有的代码来回答?我使用的一种风格会让我感到困惑,因为我是perl和编程新手。顺便说一句,我刚才给出了数据集的一个小视图,上面还有其他属性。我将向您展示我是如何处理类型的。我刚刚编辑了问题并添加了。您不能拆分地址行,该行只包含一个单词。试着理解上面的代码。如果除ADDRESS之外没有其他属性跨越多行,则可以将它们作为elsif语句附加到类型块。ADDRESS是记录类型的最后一个,ADDRESS只是我决定在此处显示的最后两个记录。每一条新记录都在一个空格后开始,空格后面有时间。我已经处理了时间和其他属性。就是这个地址,我无法让正则表达式获取值并在结果中丢弃地址。如果仔细构造循环,块的顺序无关紧要。请问我如何将默认变量$替换为实际变量?我已经在使用$\了。谢谢你的回复。恐怕我会坚持我使用的格式。例如,您可以查看我处理TYPE的方式。ADDRESS是记录的最后一个。新记录在空白后开始。
use warnings;
use strict;
while(<DATA>) {
if (/^ADDRESS/) { # if line contains ADDRESS then read addresses
while (<DATA>) { # ... in a loop
last if !/^ +/; # until we find a non-indented line
print $_; # here you can push $_ to a list
}
}
if ($_ && /^TYPE/) { # a TYPE after address can be processed now
# stuff
}
}
__DATA__
TYPE: Travel
ADDRESS
Barcelona
Paris
TYPE: Travel
ADDRESS
Barcelona
Paris
Barcelona
Paris
Barcelona
Paris