Извлечь указанную строку c из строки, используя регулярные выражения - PullRequest
0 голосов
/ 12 февраля 2020

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

Например, мой ввод может быть следующим: 00009666666605 00010444444404 00007Z22222205 00033213433104 00009000G00005

И я бы хотел сопоставить 96666666 104444444 7Z222222 332134331 9000G000

Для получения дополнительной информации последние 2 цифры всегда являются числами и описывают начальную точку действительной ссылки после начальных нулей.

Я подумал, что взломал его с помощью чего-то вроде (?<=0000).{8}|((?<=000).{9})+? но это не работает, как ожидалось.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Я бы использовал:

^0*(.*).{2}$

И доступ к вашим матчам через $1

Regex Storm demo

2 голосов
/ 12 февраля 2020

Конечно, требуется много шагов, но это должно сработать:

(?<=^000)[^0].{8}|(?<=^0000).{8}

(?<=     'start lookbehind
   ^000  'for the beginning of the string then three zeroes
)        'end lookbehind
[^0]     'match a non-zero
.{8}     'match the remaining 8 chars
|        ' OR
(?<=     'start lookbehind
   ^0000 'for the beginning of the string then four zeroes
)        'end lookbehind
.{8}     'match the remaining 8 chars

Тем не менее, в. NET, это будет быстрее сделать:

dim trimmed = line.TrimStart("0"c)
dim numberString = trimmed.Substring(0,trimmed.Length-2)

если формат этих строк всегда один и тот же

...