【问题标题】:How to string replace using lists/arrays in Python?如何在 Python 中使用列表/数组进行字符串替换?
【发布时间】:2019-09-29 10:18:14
【问题描述】:

我希望在 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.."

我该如何解决这个问题?

【问题讨论】:

标签: python arrays regex python-3.x beautifulsoup


【解决方案1】:

我会试试这个:首先,将您的输入添加到列表中:

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() 之王。

【讨论】:

  • Jack Fleeting 这个实现是用正则表达式固定的吗?
  • @britodfbr - 我不知道它是否更快(还没有测试过),但我个人不喜欢正则表达式,如果你在谷歌周围搜索,你会发现专家试图阻止使用正则表达式带有html代码。所以我通常会不惜一切代价避免它:)
  • 非常感谢! :D
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多