регулярное выражение, отфильтровывающее 'N', за которым следует любая комбинация цифр

1

Мне нужна помощь по регулярному выражению, которая отфильтровывает "N", за которой следует любая комбинация цифр.

import re
exp = "1+2+N32.23"
variable_refs = re.compile(r"([0-9]+)")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)

Текущий вывод: {key_1} + {key_2} +N {key_32}

Ожидаемый результат: {key_1} + {key_2} +N 32.23

Теги:
python-3.x

3 ответа

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

Используйте отрицательное регулярное regex lookbehind:

import re

exp = "1+2+N32.12"
variable_refs = re.compile(r"\b(?<!N|\.)([0-9]+)")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)

print(exp_template)
# {key_1}+{key_2}+N32.12
  • 0
    предположим, у меня есть exp = "1 + 2 + N30". он должен вернуть '{key_1} + {key_2} + N30', но в настоящее время он возвращает '{key_1} + {key_2} + N3 {key_0}'
  • 0
    Пожалуйста, смотрите обновленный фрагмент.
Показать ещё 5 комментариев
2

Попробуй это:

import re
variable_refs = re.compile(r"\b(?<!N)([0-9])+")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)
0

Вы можете использовать отрицательный lookbehind (?<!N) или (?<!\bN) если N необходимо сопоставить как целое "слово":

import re
exp = "1+2+N3"
variable_refs = re.compile(r"(?<!N)([0-9]+)")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)
print(exp_template)
# => {key_1}+{key_2}+N3

См. Демонстрацию Python

Ещё вопросы

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