Как я могу использовать регулярные выражения для решения этой проблемы? - PullRequest
1 голос
/ 12 сентября 2010

У меня есть две строки, из которых мне нужно извлечь данные, но не могу заставить их работать.Я хотел бы знать регулярное выражение, но, к сожалению, я не знаю.Я прочитал некоторые уроки для начинающих, но не могу найти выражения, которое будет делать то, что мне нужно.

Из этой первой строки, разделенной одинаковым символом, мне нужно пропустить первые 6 символов и взятьследующие 9 символов.После одинакового символа мне нужно взять первые 4 символа - день и год.Наконец, для этой строки мне нужны оставшиеся числа, которые являются датой в ГГГГммдд.

636014034657089=130719889904

Вторая строка кажется немного более сложной, поскольку пробелы между символами различаются, но всегда кажутся как минимум разделенными, один пробел.Иногда для разделения блоков данных используется до 15 или 20 пробелов.

Вот два разных примера, показывающих разницу в размерах.

!!92519 C 01 M600200BLNBRN D55420090205M1O

!!95815      A               M511195BRNBRN            D62520070906  ":%/]Q2#0*&

Данные, которые мне нужны изэти последние две строки:

The zip code following the 2 exclamation marks.
The single letter 'M' following that. It always appears to be in a 13 character block
The 3 numbers after the single letter
The next 3 numbers which are the person's height
The following next 3 are the person's weight
The next 3 are eye color
The next block of 3 which are the person's hair color

Последний блок, из которого мне нужны данные:

Мне нужно получить одну букву, которая в примере выглядит как 'D'.Пропустить следующие 3 цифры. Последнее и оставшиеся 8 чисел, которые являются датой в ГГГГммдд

Если кто-то может помочь мне решить эту проблему, я был бы очень признателен.

1 Ответ

2 голосов
/ 12 сентября 2010

Для первой строки вы можете использовать это регулярное выражение:

^[0-9]{6}([0-9]{9})=([0-9]{4})([0-9]{4})([0-9]{2})([0-9]{2})$

Пояснение:

^          Start of string/line
[0-9]{6}   Match the first 6 digits
([0-9]{9}) Capture the next 9 digits
=          Match an equals sign
([0-9]{4}) Capture the "day and year" (what format is this in?)
([0-9]{4}) Capture the year
([0-9]{2}) Capture the month
([0-9]{2}) Capture the date
$          End of string/line

Для второго:

^!!([0-9]{5}) +.*? +M([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})

Rubular

Работает аналогично первому. Возможно, вам придется немного изменить его, если ваши данные не совсем соответствуют формату, который ожидает регулярное выражение. Возможно, вы захотите заменить .*? на что-то более точное, но я не уверен, что, потому что вы не описали формат частей, которые вас не интересуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...