#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