разбить строку с помощью регулярного выражения в Perl - PullRequest
2 голосов
/ 27 ноября 2011

У меня есть строка, которая имеет такую ​​форму:

$ str = "30M1I20M150N20M190N50M"

РЕДАКТИРОВАНИЕ: Я хотел бы разбить эту строку, чтобы мой выводвыглядит следующим образом:

30M1I20M
150N
20M
190N
50M

Однако, когда я пытался с,

@ split_str = split (/ (\ d +) N /, $ str);

Я получаю:

30M1I20M
150
20M
190
50M

Как вы можетесмотри, N опускается в результате (150, 190 вместо 150N и 190N).Может ли кто-нибудь сказать мне, как я должен идти?Спасибо!

Ответы [ 3 ]

7 голосов
/ 27 ноября 2011

Поместите N в группу захвата.

/(\d+N)/
1 голос
/ 27 ноября 2011

См. Утверждения об осмотре in perlre.

split /(?<=[NM])/, '30M1I20M150N20M190N50M'
# returns
# qw(
#     30M
#     1I20M
#     150N
#     20M
#     190N
#     50M
# )
1 голос
/ 27 ноября 2011

попробуйте следующее (не проверено):

split(/(\d+?[MN])/, $str);
...