Нижний регистр на основе шаблона regex в Django & Python
Сценарий, который я использую, вызывает метод s_lower
для преобразования всего текста в строчные буквы, но есть одна загвоздка: если это ссылка (есть специальный regex), то он не переводит ее в строчные буквы. Поэтому я хотел бы применить ту же или подобную логику с другими regex.
RE_WEBURL_NC = (
r"(?:(?:(?:(?:https?):)\/\/)(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1["
r"6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?"
r":[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9][a-z0-9_-]{0,62})?[a-z0-9]\.)+(?:[a-z]{2,}\.?))(?::\d{2,5})?)(?:"
r"(?:[/?#](?:(?![\s\"<>{}|\\^~\[\]`])(?!<|>|"|').)*))?"
)
def s_lower(value):
url_nc = re.compile(f"({RE_WEBURL_NC})")
# Do not lowercase links
if url_nc.search(value):
substrings = url_nc.split(value)
for idx, substr in enumerate(substrings):
if not url_nc.match(substr):
substrings[idx] = i18n_lower(substr)
return "".join(substrings)
return i18n_lower(value)
Я хочу, чтобы весь текст, кроме текста внутри специальных тегов, был в нижнем регистре.
def s_lower(value):
spec_nc = re.compile(r"\[spec .*\]") # this is for [spec some raNdoM cAsE text here]
if spec_nc.search(value):
substrings = spec_nc.split(value)
for idx, substr in enumerate(substrings):
if not spec_nc.match(substr):
substrings[idx] = i18n_lower(substr)
return "".join(substrings)
return i18n_lower(value)
Я писал это как комментарий, но он получился слишком длинным...
Вы не сказали, в чем проблема, но похоже, что вам не хватает ()
вокруг regex (так что разделенная строка заканчивается substrings
). Должно быть
spec_nc = re.compile(r"(\[spec .*\])")
Примечание:
<Таким образом, вы можете упростить свой код до:
def s_lower(value):
spec_nc = re.compile(r"(\[spec [^]]*\])") # this is for [spec some raNdoM cAsE text here]
substrings = spec_nc.split(value)
for idx, substr in enumerate(substrings):
if idx % 2 == 0:
substrings[idx] = i18n_lower(substr)
return "".join(substrings)