Python Regex - необязательное совпадение, не фиксируйте одно совпадение - PullRequest
0 голосов
/ 09 октября 2018

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

Итак, у меня есть что-то вроде:

re.findall("([+-] \d+)x", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x")

Это дает мне все множители для x, как положительные, так и отрицательные (отлично!).Например, я хотел бы, чтобы отрицательные числа были - 2, но не возвращали знак плюс для положительных чисел (4 вместо + 4).Я потерпел неудачу с параметром ?:, возможно, я просто использовал его неправильно.

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете использовать чередование , а также позитив и предвидение и взгляд назад:

(?<=\+) \d+(?=x)|- \d+(?=x)

print(re.findall("(?<=\+) \d+(?=x)|- \d+(?=x)", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x"))
# [' 4', '- 2', '- 7', ' 87', '- 100']

Regex demo | Python demo

Пояснение

  • (?<=\+) \d+(?=x) Позитивный взгляд позади, чтобы утверждать, что слева - +, затем соответствуетпробел, за которым следуют одна или несколько цифр.Используйте положительный прогноз, чтобы утверждать, что на правой стороне находится x
  • | или
  • - \d+(?=x) Соответствие -, пробел и одна или несколько цифр.Затем используйте положительный прогноз, чтобы утверждать, что справа есть x

Если вы не хотите включать пробел перед матчем без +, вы можете удалить его доцифру и добавьте ее к положительному виду:

(?<=\+ )\d+(?=x)|- \d+(?=x)

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