2013-03-28 3 views
1

Так что в моем регулярном выражении У меня есть группа, содержание которых является числом с прочерками:Regex положительный lookaheads в группе, чтобы отфильтровать конкретный символ, а затем отфильтрованную группу по запросу?

00-111-222-333-44 

Как я могу использовать положительный предпросмотр с тире характер лишь отдельных цифр в этой группе цель состоит в том, когда я обратная ссылка группа позже я ожидаю это в моем выходе:

0011122233344 

что-то вроде этого, но и для всей строки, прямо сейчас выражение просто совпадает с первым номером перед тиром, то есть 00:

[0-9]+(?=-) 

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

+0

Почему регулярное выражение? Разве вы не можете просто заменить все дефисы пустой строкой, чтобы получить то, что хотите? – anubhava

+0

Ну, номер является частью длинной сложной строки с большим количеством полей и символов, я использую группы в своем регулярном выражении, чтобы выбрать определенные поля, а затем обратный порядок их в правильном порядке, я думал, что можно будет просто выбрать цифры внутри одной группы регулярных выражений. – f10bit

+0

Хорошо Можно спросить, на каком языке вам это нужно? – anubhava

ответ

0

Как я могу использовать позитивный lookhhead с тире в этой группе, так что, когда я возвращаю группу позже, она содержит только цифры?

Это невозможно с регулярным выражением. Группа может ссылаться только на полную подстроку входной строки. Вместо того, чтобы пытаться сопоставить это, вы должны применить двухэтапный подход и использовать regex-replace, чтобы удалить все тире перед сопоставлением.

+0

Не могли бы вы дать мне пример замены regex posix, чтобы устранить тире перед применением моего второго регулярного выражения и обратного обращения к моим 5 группам в правильном порядке. – f10bit

+0

5 групп? Я хоть хотел только одного? – Bergi

+0

Это мое текущее выражение: /(^.*text:\+)(.*);(text.*)(@.*;)(.*$)/ Вторая группа содержит мое число с тире: (. *), в конце концов я переупорядочиваю вывод, используя: \ 1 \ 2 \ 4 \ 3 \ 4 \ 5 – f10bit

1

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

perl -pe 's#(?<=\d)-(?=\d)##g'