Проблема с регулярным выражением Python, переводящим имя файловой системы в экспоненту

#python #regex

#python #регулярное выражение

Вопрос:

Я запускаю следующие аргументы для скрипта. Однако мое регулярное выражение также переводит файловые системы с числами в них. Я не уверен, что проблема здесь:

 testscript --app-fs=/app=1g,/usr/local2=10g
 

Ручное тестирование.

 import re
appfs = '/app=1024g,/usr/local2=10g'
appfsstr = str(re.sub(r'[d][Gg]', lambda x: re.sub('[Gg]', '', x.group(0)), re.sub(r'[d]{1,3}', lambda x: str(int(x.group(0)) * 1024), appfs)))
print (appfsstr)
 
 /app=1044484096,/usr/local2048=10444840960
 

Желаемый результат:

 /app=1048576,/usr/local2=10240
 

Комментарии:

1. Извините, но, может быть, все, что вам нужно, это re.sub(r'(d )[Gg]b', lambda x: str(int(x.group(1)) * 1024), appfs) ?

Ответ №1:

Вы можете использовать

 re.sub(r'(d )[Gg]b', lambda x: str(int(x.group(1)) * 1024), appfs)
 

Регулярное выражение соответствует:

  • (d ) — Группа 1: одна или несколько цифр
  • [Gg] G или g
  • b — граница слова.

lambda x: str(int(x.group(1)) * 1024) Замена принимает объект match data ( x ), получает значение Group 1 ( x.group(1) ), преобразует строковое значение в int, затем умножает его на 1024 и преобразует результат обратно в строку.

Смотрите демонстрацию Python:

 import re
appfs = '/app=1024g,/usr/local2=10g'
print( re.sub(r'(d )[Gg]b', lambda x: str(int(x.group(1)) * 1024), appfs) )
# => /app=1048576,/usr/local2=10240