Python: удалить слова между двумя разделителями

У меня есть шумные данные .. что-то вроде

<@ """@$ FSDF >something something <more noise> 

теперь я просто хочу извлечь «что-то». Есть ли способ удалить текст между этими двумя метриками «<» и «>» ??

благодаря

5 Solutions collect form web for “Python: удалить слова между двумя разделителями”

Используйте регулярные выражения :

 >>> import re >>> s = '<@ """@$ FSDF >something something <more noise>' >>> re.sub('<[^>]+>', '', s) 'something something ' 

[Обновить]

Если вы попробовали шаблон типа <.+> , Где точка означает, что любой символ и знак плюса означает один или несколько, вы знаете, что это не работает.

 >>> re.sub(r'<.+>', s, '') '' 

Зачем!?! Это происходит потому, что регулярные выражения по умолчанию являются «жадными». Выражение будет соответствовать чему угодно до конца строки, включая > -, и это не то, что мы хотим. Мы хотим совместить < и останавливаться на следующем > , поэтому мы используем шаблон [^x] , который означает «любой символ, но x» (x is > ).

? оператор поворачивает спичку «не жадный», так что это имеет тот же эффект:

 >>> re.sub(r'<.+?>', '', s) 'something something ' 

Предыдущее является более явным, это меньше печатает; помните, что x? означает ноль или одно вхождение x.

Конечно, вы можете использовать регулярные выражения.

 import re s = #your string here t = re.sub('<.*?>', '', s) 

Вышеприведенный код должен это сделать.

 import re my_str = '<@ """@$ FSDF >something something <more noise>' re.sub('<.*?>', '', my_str) 'something something ' 

Функция re.sub принимает регулярное выражение и заменяет все совпадения в строке вторым параметром. В этом случае мы ищем все символы между < и > ( '<.*?>' ) И заменяя их ничем ( '' ).

? используется для re поиска неживых запросов.

Подробнее о модуле re .


Если эти «шумы» на самом деле являются html-тегами, я предлагаю вам изучить BeautifulSoup

Сначала спасибо Пауло Скардин, я использовал твою речку, чтобы сделать отличную вещь. Идея заключалась в том, чтобы иметь свободный текст LibreOffice po для печати. И я сделал следующий скрипт, который очистит файл справки для более мелких и простых.

 import re f = open('a.csv') text = f.read() f.close() clean = re.sub('<[^>]+>', ' ', text) f = open('b.csv', 'w') f.write(clean) f.close() 

Для интереса вы можете написать код, например:

 with open('blah.txt','w') as f: f.write("""<sdgsa>one<as<>asfd<asdf> <asdf>two<asjkdgai><iasj>three<fasdlojk>""") def filter_line(line): count=0 ignore=False result=[] for c in line: if c==">" and count==1: count=0 ignore=False if not ignore: result.append(c) if c=="<" and count==0: ignore=True count=1 return "".join(result) with open('blah.txt') as f: print "".join(map(filter_line,f.readlines())) >>> <>one<>asfd<> <>two<><>three<> 
  • Python: разделите все, кроме пробелов и буквенно-цифровых
  • Смутно о модулях и функциях python
  • В каком порядке следует понимать концепции Python для абсолютных новичков?
  • Python, создание объектов
  • Python: Как сгенерировать 12-значное случайное число?
  • Сравните, если две переменные ссылаются на один и тот же объект в python
  • регулярное выражение для строкового формата
  • Почему «if foo:» следует за веткой, даже если функция foo возвращает False?
  • Python - лучший язык программирования в мире.