Добавление второго поиска в шаблон регулярных выражений? - PullRequest
1 голос
/ 31 января 2012
// LINE 1   
<td align="left" nowrap><font face="courier, monospace" size="-1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2002&nbsp;GC1)</font></td>

// LINE 2
<td align="left" nowrap><font face="courier, monospace" size="-1">&nbsp;99942&nbsp;Cocoon</font></td>

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

Шаблон регулярного выражения = ([0-9]+)&nbsp;([A-Za-z0-9]+)

  • LINE1: группа1 = 2002, группа2 = GC1
  • LINE2: группа 1 = 99942, группа 2 = кокон

Пройдя по этим данным, я заметил, что есть новый тип строки HTML, в начале которой мне нужно получить дополнительное число.

// LINE 3
<td align="left" nowrap><font face="courier, monospace" size="-1">162421&nbsp;(2000&nbsp;CG70)</font></td>
  • LINE3: группа 1 = 2000, группа 2 = CG70

То, что я пытаюсь сделать, - это изменить мой шаблон для дополнительного захвата 162421, который соответствует тому же шаблону ([0-9]+)&nbsp;, но, будучи новичком в регулярных выражениях, я не уверен, как добавить эту возможность в мой шаблон. Каждый раз, когда я пытаюсь это сделать, я либо отменяю уже работающий поиск, либо перезаписываю часть результата.

ПРИМЕЧАНИЕ. Я использую это с: NSRegularExpression на iOS.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Вам нужно будет добавить группу захвата для ранних цифр в строке.В примере за этими цифрами следует "";(один или много раз) и "(", и все это необязательно для соответствия регулярному выражению.

  (?:([0-9]+)(?:&nbsp;)+\()?([0-9]+)&nbsp;([A-Za-z0-9]+)
  // ^                      ^             ^                 capture groups

Самая сложная часть имеет диапазоны захвата.

Теперь у вас есть одинбольше группы захвата, у вас всегда будет 4 диапазона при запросе к объекту NSTextCheckingResult (диапазон 0-индекса равен диапазону совпадений весь , другие - диапазоны захвата).

Но иногдабудут действительны только последние два.
Чтобы убедиться, проверьте location член NSRange против NSNotFound. Если проверка прошла успешно, диапазон действителен, и вы сопоставляете и фиксируете ранние цифры, в противном случае - нет.

1 голос
/ 31 января 2012

Как насчет:

([0-9]+)&nbsp;([A-Za-z0-9]*)

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

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