python3: регулярное выражение группы 1, неожиданный результат

1

Я пытаюсь найти шаблон и поймать его в python3. По какой-то причине re.search('(NM_\d+)[^.]', 'NM_000051.3').group(1) не возвращает то, что я ожидаю. Результатом является "NM_00005" вместо "NM_000051". Может кто-нибудь объяснить, почему?

  • 0
    вам нужно удалить отрицание: re.search('(NM_\d+)[.]', 'NM_000051.3').group(1)
  • 0
    regexr.com
Показать ещё 1 комментарий
Теги:
python-3.x

1 ответ

0
Лучший ответ

вы отрицаете . символ с [^.] чтобы он соответствовал 1 всем правильным. Вам нужно просто не отрицать это, чтобы ваша группа остановилась перед этим.

>>> re.search('(NM_\d+)[.]', 'NM_000051.3').group(1)
'NM_000051'

такой же как

>>> re.search('(NM_\d+)\.', 'NM_000051.3').group(1)

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

re.search('(NM_\d+)', 'NM_000051.3').group(1)
  • 0
    Хорошо, я понял. 1 - это последняя цифра, которую можно использовать для выполнения условия, не являющегося символом точки, в конце моего регулярного выражения. Спасибо! Я изменил его на "\. *", Так как это может быть либо точка (в этом случае меня не волнуют цифры после точки), либо вообще не точка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню