Как убрать подстроку, начинающуюся и заканчивающуюся чем-то? - PullRequest
2 голосов
/ 18 октября 2019

Как мне удалить подстроку из строки, начинающейся и заканчивающейся определенной комбинацией символов, такой как:

' bla <span class=""latex""> ... This can be different1 ... </span> blub <span class=""latex""> ... This can be different2 ... </span> bleb'

Что я хочу получить в результате:

'bla blub bleb'

Я пыталсякак-то так

string.replace('<span class=""latex"">' * '</span>', '')

но это не работает.

Есть ли способ реализовать это?

Ответы [ 4 ]

2 голосов
/ 18 октября 2019

Это может работать:

>>> import re
>>> x=re.sub(r"""<span class=""latex"">.+?</span>""", "", s)

>>> x
' bla  blub  bleb'

Regex101

РЕДАКТИРОВАТЬ : после разъяснения ОП изменил ответ на использование ленивый квантификатор вместо группы захвата. Хотя это работает, оно не масштабируется до более сложных случаев . Если это так, правильным решением было бы проанализировать строку и извлечь то, что нужно.

2 голосов
/ 18 октября 2019

Читать о функция re.sub .

Простой пример:

import re

s = ' cvbcx cvbcx <span class=""latex""> ... This can be different ... </span>vcvbcxbvxc'
re.sub(r'<span class=""latex"">.+</span>', '<span class=""latex""></span>', s)

>> ' cvbcx cvbcx <span class=""latex""></span>vcvbcxbvxc'
0 голосов
/ 18 октября 2019

Если вы хотите сохранить данные между:

    >>> x
'<span class=""latex""> ... This can be different ... </span>'
>>> 
>>> d = re.sub('<(/)?span(\ class=\"\".*\"\")?(>)', '', x)
>>> 
>>> d
' ... This can be different ... '
>>> 

Если вы хотите сохранить теги:

>>> x
'<span class=""latex""> ... This can be different ... </span>'
>>> 
>>> 
>>> 
>>> new_data = 'abc 123 456'
>>> 
>>> 
>>> d = re.sub('\">.*</','\">{}</'.format(new_data),x)
>>> 
>>> 
>>> d
'<span class=""latex"">abc 123 456</span>'
>>> 
>>> 
>>> 
0 голосов
/ 18 октября 2019

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

import re

s = ' cvbcx cvbcx <span class=""latex""> ... This can be different ... </span>vcvbcxbvxc'
r = re.search( r'(<span class=""latex"">)(.+)(</span>)', s)

print(s)
# cvbcx cvbcx <span class=""latex""> ... This can be different ... </span>vcvbcxbvxc

# print(r)
# <re.Match object; span=(13, 73), match='<span class=""latex""> ... This can be different >

print(r.group(1), r.group(3))
# <span class=""latex""> </span>
...