#python-3.x
#python-3.x
Вопрос:
У меня может быть любая из следующих входных строк —
i/p 1) Required 16 pcs
i/p 2) Required7 units
i/p 3) Requesting 12each
Я хочу выполнить некоторую замену на основе регулярных выражений, чтобы у меня были следующие выходные данные для вышеуказанных 3 строк —
o/p 1) Required 16 units
o/p 2) Required 7 units
o/p 3) Requesting 12 units
В принципе, если моя строка содержит pcs / units / each и целое число перед этим, я хочу сделать следующее —
#1. замените строку «pcs» / «each» на «units» amp;
#2. добавьте пробелы до и после целочисленного значения
Я использую re в python 3.8. Я предполагаю, что мне, возможно, придется использовать обратные ссылки и нумерованные группы захвата, но я не могу понять, как именно сделать, чтобы это сработало.
Ответ №1:
import re
txt = '''
Required 16 pcs
Required7 units
Requesting 12each
'''
print( re.sub(r's*(d )s*(?:units|each|pcs)', r' 1 units', txt) )
С принтами:
Required 16 units
Required 7 units
Requesting 12 units
Ответ №2:
import re
s =
"""
Required 16 pcs
Required7 units
Requesting 12each
"""
s2 = re.sub(r'(S*?)(s*?)(d*)(s*?)(pcs|units|each)',r'1 3 each',s)
print(s2)
Объяснение:
(S*?)
—S
без пробелов, не жадный*?
— группа захвата 1- группа захвата 3 — это цифра (ы)
- re sub
- замена — это группа 1, за которой следует буквенный текст с пробелом, за которым следует группа 3 и «каждый» в виде буквенного текста. Исправляет отсутствующие начальные / конечные пробелы. с группами 2 и 4 — необязательный не жадный пробел 1 .