Замените подчеркивание из всех html-ссылок на регулярное выражение и python

#python #regex

Вопрос:

Поэтому в настоящее время я использую python.

Как я могу просмотреть HTML-файл и заменить все вхождения:

<a href="#some_snake_case_text">

и превратите его в:

<a href="#somesnakecasetext">

независимо от текста, который находится внутри href?

Итак, я собирался использовать регулярное выражение, я уже пару часов, и мне не удалось сопоставить «_» между тегом href, чтобы удалить их… Я не могу просто сопоставить слово и выполнить замену всех cu, которая фактически заменила бы все те, которые не предназначены для всего документа.

Я попробовал это, чтобы вычислить все «_»

<a href="#(.*(_).*) ">

или все, кроме подчеркиваний:

<a href="#([^_]_?) ">

чтобы потом, может быть, заменить его?!

Как я могу это сделать?

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

1. Пожалуйста, пожалуйста, также озвучьте полезные ответы ниже, спасибо.

Ответ №1:

С заменой метода:

 import re

def subst(x):
    return x.group().replace('_', '')

s = 'xxx <a href="#some_snake_case_text"> xxx'
p = r'<as href="#[^"]*">'
print(re.sub(p, subst, s))
 

См. Доказательство Python.

Результаты: xxx <a href="#somesnakecasetext"> xxx

объяснение

 --------------------------------------------------------------------------------
  <a                       '<a'
--------------------------------------------------------------------------------
  s                       whitespace (n, r, t, f, and " ") (1 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  href="#                  'href="#'
--------------------------------------------------------------------------------
  [^"]*                    any character except: '"' (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  ">                       '">'
 

Ответ №2:

Вы можете использовать re.sub :

 import re
s = '<a href="#some_snake_case_text">'
new_s = re.sub('(?<=href=")[^"] ', lambda x:''.join(x.group().split('_')), s)
 

Выход:

 '<a href="#somesnakecasetext">'