2010-11-16 2 views
0

Я хочу, чтобы разобрать строку как это,Вопрос по синтаксическому анализу текста В Perl

S1,F2 title including several white spaces (abbr) single,Here<->There,reply 

И я хочу, выход, как показано ниже,

1 
2 
title including several white spaces 
abbr 
single 
Here22There # identify <-> and translate it to 22; 
reply 

Мне интересно, как разобрать строку выше?

Метод 1. Я планирую разбить всю строку на четыре сегмента, а затем проанализировать отдельные подсегменты.

сегмент1. S1,F2

segment2. title including several white spaces

сегмент3. abbr

сегмент4. single,Here<->There,reply

Метод 2. Я просто пишу сложное выражение регулярного выражения для его синтаксического анализа.

Какой метод более подходит для моей практики?

Оценка по любым комментариям или предложениям.

+1

возможный дубликат [ Нужна помощь с Perl reg ex? ] (http://stackoverflow.com/questions/4192213/need-help-with-perl-reg-ex) Это происходит после этого, но это лучший вопрос с некоторыми лучшими ответами - это та же самая точная основная проблема , – Axeman

ответ

2

Предполагая, что ваш вклад будет в формате, заданном можно использовать регулярные выражения, как:

^S(\d+),F(\d+)\s+(.*?)\((.*?)\)\s+(.*?),(.*?),(.*)$ 

Codepad link

+0

Привет. Почему ваше выражение заканчивается на '$' (1 доллар)? Я тестировал и нашел, что он отлично работает с/без '$'. –

+2

@Nano HE: '^' соответствует началу строки, '$' соответствует концу строки ... – Jon

1

Что касается первого метода, что вы можете сделать, это как первый разделить строку на запятая, например

my $line = 
'S1,F4 title including several white spaces (abbr) single,Here<->There,reply'; 
my ($field1, $field2, $field3, $field4) = split /,/, $line; 

и th ан применить регулярное выражение на поле с указанной подстроки S1 и F2 title including several white spaces (abbr) single как

my ($field5) = $field1 =~ /S(\d+)/; 
my ($field6, $field7, $field8, $field9) = 
        $field2 =~ m/^F(\d+)\s+(.*?)\((.*?)\)\s+(.*?)$/; 

Это будет работать для всех этих строк, а также помогают избегать использования и делая сложные регулярные выражения,

S1,F2 title including several white spaces (abbr) single,Here<->There,reply 
S1,F2 title including several white spaces (abbr) single,Here<->There 
S1,F2 title including several white spaces (abbr) single,Here<->There,[reply]