Как заменить строку, используя списки / массивы в Python? - PullRequest
3 голосов
/ 12 мая 2019

У меня есть следующие входные данные и желаемые выходные данные, которые я хочу заменить в документе HTML, возможно, используя регулярные выражения или замену строк.

if :
input: '<b>º </b>' 
output: ['º']

input: '<b>Nº </b>' 
output: []

input: '<b>1º </b>' 
output: []

input: '<b>1ª </b>' 
output: []

input: '<p>N<u>º </u></p>' 
output: ['º']

Попытка

l = [ ('<b>º </b>', ['º']), ('<b>Nº </b>', [])]

result = None
for i in l:
    codigo = re.sub(r'<(b|sup|s|u)>\s*[oº]\s*</(b|sup|s|u)>', 'º ', i[0], re.I)
    soup = BeautifulSoup(codigo, 'html.parser')
    result = soup.find_all('b', string='º')
    assert str(result) == l[1], "ops.."

Как мне решить эту проблему?

1 Ответ

1 голос
/ 12 мая 2019

Я бы попробовал это: сначала добавьте ваши данные в список:

codi = ['<b>º </b>' ,'<b>Nº </b>' ,'<b>1º </b>', '<b>1ª </b>','<p>N<u>º </u></p>'  ]

Затем обработайте список с помощью BS:

for i in codi:
   soup = bs(i,'html.parser')
   print('input:',i)
   targets = soup.select('*:contains(º)')
   for target in targets:
       if  target.text.strip() == 'º':
           print('output:',target.text.strip())        
   print('--------------')

Выход:

input: <b>º </b>
output º
--------------
input: <b>Nº </b>
--------------
input: <b>1º </b>
--------------
input: <b>1ª </b>
--------------
input: <p>N<u>º </u></p>
output º
--------------

Кредит за подход: многочисленные ответы от @QHarr - короля soup.select().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...