Очистка шаблона регулярных выражений для замены подстановочных знаковPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Очистка шаблона регулярных выражений для замены подстановочных знаков

Сообщение Anonymous »

Мне нужна функция для очистки шаблонов регулярных выражений в Python, в частности для строк, которые могут содержать подстановочные знаки (%). Цель состоит в том, чтобы заменить эти подстановочные знаки % эквивалентом регулярного выражения .*?, чтобы обеспечить гибкое сопоставление в шаблонах регулярных выражений. Кроме того, функция должна обеспечивать правильное экранирование специальных символов регулярных выражений без добавления ненужных escape-символов.
Требования:
  • Преобразуйте % в .*? в предоставленных шаблонах регулярных выражений.
  • Экранируйте специальные символы регулярных выражений только при необходимости, избегая ненужных escape-последовательностей. .
  • Сохранять целостность существующих шаблонов регулярных выражений.
Примеры:
  • Ввод: %основной аккаунт.*?Годовая процентная доходность%
    Выход exp: .*?основной счет.*?Годовая процентная доходность.*?
    Строка: Ваш основной счет предлагает годовую процентную доходность в размере 3,25%. Этот счет идеально подходит для сбережений.
  • Ввод: процентная ставка на вашем счете ((\ d+\.\d+)|[^.])*?([\d+.]+%)
    Выходные данные: процентная ставка по ваша учетная запись ((\d+\.\d+)|[^.])*?([\d+.]+.*?)
    Строка: Процентная ставка по вашему счету составляет 1,75%, а рекламные ставки достигают 2,00%.
еще несколько входных данных:

Код: Выделить всё

1: Overdraft Protection Service Fee[^.]*?(\\$\\d+)

2: APY was accurate as of ([^\\s]+)

3: Cuenta de Ahorro opcional 6Obtenga hasta un ([^\\s]*) de porcentaje de rendimiento anual

4: \\bVisa\\b

5: withdrawals(.*?) per day

6: ([^a-zA-Z\\s]+) total is calculated based on all withdrawals

7: activate .*? calling ([^\\s]+)
Я попробовал следующий подход:

Код: Выделить всё

def _sanitize_regex(rhs: string):
# Replace '%' wildcards with '.*?' for regex matching
rhs = rhs.replace('%', '.*?')

# Define special characters that need to be escaped in regex
special_chars = ['$', '^', '[', ']', '{', '}', '|', '+', '', '\\']

sanitized_rhs = []
inside_group = False  # Track whether we're inside a group (e.g., parentheses or brackets)

for char in rhs:
# Handle opening and closing of groups
if char in ['(', '[', '{']:
inside_group = True
sanitized_rhs.append(char)
elif char in [')', ']', '}']:
inside_group = False
sanitized_rhs.append(char)
# Escape special characters only if they are not inside a group
elif char in special_chars:
if not inside_group:  # Only escape if we are not inside a group
sanitized_rhs.append(f"\\{char}")
else:
sanitized_rhs.append(char)  # Do not escape inside groups
else:
sanitized_rhs.append(char)

# Join sanitized parts back together
return ''.join(sanitized_rhs)
Но это не сработало для следующих входных данных:
  • процентная ставка по вашему счету ((\d+.\d+)|[^.])*?([\d+.]+%)
выход: процентная ставка на вашем счете ((\d+\.\d+)\|[^.])*?([\d+.]\+.*?)< /p>
дополнительный \ был добавлен приведенным выше кодом. Можете ли вы помочь мне очистить строки, чтобы получить правильное регулярное выражение, учитывая вышеуказанные требования?

Подробнее здесь: https://stackoverflow.com/questions/790 ... eplacement
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»