Как я могу извлечь части этого имени файла в Perl? - PullRequest
2 голосов
/ 23 февраля 2010

В моем листе Excel с колонкой Changeset я получаю набор изменений как:

C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS@@\main\ajsdkljlat\hahdasdhfk\1\test.txt\sub\hsdaklfl\3

Мне нужно использовать split функцию в скрипте Perl, чтобы было два вывода (ввод в виде строки выше)

  • часть до @@ (например, здесь C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS)
  • последний символ строки (например, здесь-3)

Ответы [ 4 ]

6 голосов
/ 23 февраля 2010

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

my ($first, $second) = / ^ (.+?) @@ .* (.) $ /x;
3 голосов
/ 23 февраля 2010

От Мастерство регулярных выражений от Марка Домина:

Правило Рэндала

Используйте захват или m//g, когда вы знаете, что хотите сохранить.

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

Randal Schwartz

Вы знаете, что хотите сохранить, поэтому используйте m//g, как в Ответ Леона Тиммерманса .

2 голосов
/ 23 февраля 2010

Я думаю, это то, что вы хотите, или вам нужно все это в одном утверждении?

 my ($before, $after) = split '@@', $input;
 my $last_char = substr($after, -1, 1);
0 голосов
/ 23 февраля 2010

Добавляя к двум ответам уже, вы можете попробовать следующее, используя только функцию разделения:

$s = 'C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS@@\main\ajsdkljlat\hahdasdhfk\1\test.txt\sub\hsdaklfl\3';

@temp = split/@@/,$s;
$part1 = $temp[0]; # C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS

@temp = split//,$s;
$part2 = $temp[-1]; # 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...