Как мне извлечь слова из строки, разделенной запятыми, в Perl?

StackOverflow https://stackoverflow.com/questions/1865758

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть реплика:

$myline = 'ca,cb,cc,cd,ce';

Мне нужно соответствовать ка в $1, CB в $2, и т.д..

К сожалению

$myline =~ /(?:(\w+),?)+/;

не работает.С pcretest это соответствует только 'ce' в 1 доллар.Как это сделать правильно?Нужно ли мне помещать это в цикл while?

Спасибо!

Это было полезно?

Решение

Почему бы не использовать split функция:

@parts = split(/,/,$myline);

split разбивает строку на список строк, используя регулярное выражение, которое вы предоставляете в качестве разделителя.

Другие советы

Разве это не проще в использовании my @parts = split(/,/, $myline) ?

Хотя split это хороший способ решить вашу проблему, захват регулярного выражения в контексте списка также работает хорошо.Полезно знать об обоих подходах.

my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;

Загляните в CSV-файлы PM, которые вы можете загрузить с CPAN, т. е. Text::CSV или Text::CSV_XS.

Это даст вам то, что вам нужно, а также учтет любые значения, разделенные запятыми, которые случайно будут заключены в кавычки.

Использование этих модулей упрощает разделение данных и их анализ...

Например:

my @field = $csv->fields;

Если количество элементов является переменным, то вы не собираетесь делать это так, как к этому стремитесь.Выполните цикл по строке, используя глобальный флаг:

while($myline =~ /(\w+)\b/g) {
    # do something with $1
}

Я предполагаю, что ваши реальные данные более сложны, чем "ca, cb, cc, cd, ce", однако, если это не так, то использование регулярных выражений, вероятно, не оправдано.Вам было бы лучше разделить строку на разделяющий символ:

my @things = split ',', $myline;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top