Как искать внутри строки и изменять

Здесь новичок в Python. В скрипте, который я использую, есть метод s_lower(value) для перевода в нижний регистр каждого текста, опубликованного пользователем. Также есть некоторые специальные синтаксисы, такие как [spec sometexthere].

Я хочу не писать строчные буквы, если текст имеет специальный синтаксис (в данном случае [spec ...]), но писать строчные буквы во всем остальном тексте.

Например,

THIS IS A TEXT [spec CAPITAL] EXAMPLE

Это должно быть отображено как

this is a text [spec CAPITAL] example

К сожалению, я не смог увидеть/записать журналы (возможно, из-за docker), поэтому я как бы слеп, но надеюсь, этот блок кода ниже даст вам некоторую подсказку, чтобы направить меня

WEBURL = r"(?:(?:(?:(?:https?):)\/\/)(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[?") # actually much more longer

def s_lower(value):
    url_nc = re.compile(f"({WEBURL})")

    # Links should not be lowered
    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 value.lower()

Я хочу что-то вроде если значение имеет "[spec", то найдите номер индекса "[" и "]", затем не опускайте текст между этими парантезами, но опускайте весь остальной текст.

этот код разбивает текст на части, а затем смотрит, находится ли он в скобках, если нет, то делает его строчным

text = "THIS IS A TEXT [spec CAPITAL] EXAMPLE"
lower = True
text2 = ""
for char in text:
  if char == "[":
    lower = False
    text2 += char
    continue
  if char == "]":
    lower = True
    text2 += char
    continue
  if lower:
    if char.islower():
      text2 += char
      continue
    text2 += char.lower()
  else:
    text2 += char

print(text2)
Вернуться на верх