Требуется помощь по замене регулярных выражений Python

#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 .