Я смотрю на список строк, разделенных пробелами. Я пытаюсь найти части строки, содержащие строчную букву «n», которая не находится рядом с прописной буквой, а затем удалить строчную «n» и любую соседнюю букву/цифру. Пример:
before = ["23n 5T R3",
"4T 3R 2+ 2-",
"-2 +3RF n3",
"Nn1 L9 3+ n",
"un2 L0 -9 e"]
Я пытаюсь получить вывод как:
after = ["5T R3",
"4T 3R 2+ 2-",
"-2 +3RF",
"Nn1 O9 3+",
"L0 -9 e"]
Я не совсем уверен, как начать это условие регулярного выражения. Извините, если это немного жестко.
Мой вопрос отклонен без указания, что выглядит не так :) Может быть, администраторы могут внести свой вклад здесь?
Вы можете использовать негативный взгляд назад, чтобы добиться этого.
Демо: https://regex101.com/r/HKi4tp/2
Выкройка: \b\S*(?<![A-Z])n\S*\b ?
Авария:
\b\S*
и \S*\b
: Сопоставьте любые символы без пробелов в начале и в конце слова. (Примечание: в зависимости от ваших потребностей \S
можно заменить на \w
или [a-zA-Z0-9]
)(?<![A-Z])n
: совпадение n
без предшествующего [A-Z]
?
: сопоставьте необязательный пробел после словаЭто удивительное объяснение и способ продемонстрировать это. Большое спасибо @Prasanna!
Запуск "[re.sub(r'([\b.n\b|\b.n\b"]+)','', x) for x in before]" удаляет все строчные буквы "n", даже если они расположены рядом с Заглавная буква.