Проблема с поиском регулярного выражения с помощью функции lookahead / lookbehind

#python #regex #parsing #regex-lookarounds

#python #регулярное выражение #синтаксический анализ #поиск регулярных выражений

Вопрос:

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

 matcher = re.compile(r'(?<=[/- ])([0-9] )')
string = 'Redundant 100/70/50/50-0/0/0/0; EX-SEP ANN IMPLANT MAX.                     '
string2 = 'Big High 200/40/40/0/0-80/60/40/0/0; EX-WP 9months 7.                                                                                                                                                                                                 '
  

Результатом этого является

 ['100', '100', '85', '50', '0', '0', '0', '0']
['100', '80', '50', '0', '0', '80', '60', '40', '0', '0', '9', '7']
  

Я хотел бы найти способ получить только числа рядом с ‘/’, но не ‘9’ и ‘7’ во второй строке, например. Я не могу найти способ сделать это и попытался использовать выражение lookbehind, но не могу получить только те числа, которые я хочу, без получения других чисел в моих строках.

Для меня это все ново, и я был бы очень признателен за любую помощь в том, почему я не получаю ожидаемые ответы для каждой строки

Ответ №1:

Вы можете сопоставлять последовательности цифр, близкие к / или - использующие

 (?<=[/-])[0-9] |[0-9] (?=[/-])
  

Смотрите демонстрацию регулярных выражений и график регулярных выражений:

введите описание изображения здесь

Подробные сведения

  • (?<=[/-])[0-9] — одна или несколько цифр / - , перед которыми стоит или
  • | — или
  • [0-9] (?=[/-]) — одна или несколько цифр, которые имеют / или - сразу после.

Комментарии:

1. Спасибо! Я застрял на этом некоторое время и решил, что есть более простое решение, чем то, что я думал сделать

2. Если что-то неясно или ответ не соответствует требованиям OP, просто дайте мне знать, чтобы я мог исправить решение.

3. Все работает отлично! Спасибо, это большая помощь в моей путанице в этой теме