Убрать часть строки с помощью regex
получается (см. после MANGO), то есть в аналогичных строках (например,
) текст удаляется,а цифры остаются,как видно ниже.
'GREAT ESCAPE', '3.95', 'MELON REFRESHER', '3.95', 'MIXED', '5.95', 'MANGO', '1.95 2.95 ', 'LYCHEE', '1.95 2.95 '
hibiscusM
01.02.19 17:49:40 MSK
vvn_black ★★★★★
( 01.02.19 17:51:45 MSK )

Some people, when confronted with a problem, think «I know, I’ll use regular expressions.» Now they have two problems. (c)
Далее: не-регулярный синтаксис (в данном случае context-free) регулярными выражениями не парсится. Использую любой доступный парсер dom и бери значения уже от туда.
beastie ★★★★★
( 01.02.19 17:55:28 MSK )
Последнее исправление: beastie 01.02.19 17:59:39 MSK (всего исправлений: 1)
Если костылять, то
>>> line1 ' ' >>> line2 ' ' >>> import re >>> pattern = re.compile(r'pound;[0-9]+\.[0-9]+') >>> re.search(pattern, line1).group(0).split(';')[-1] '1.95' >>> re.search(pattern, line2).group(0).split(';')[-1] '5.95'
Как удалить из строки?

при парсинге авито хотел вытащить цену которая лежит в но она имеет такой вид задача отсоединить число которое здесь должно быть 36 790 и знак рубля ₽ при этом стрипнуть все невидимые знаки &_nbsp;
for i in get_all_price: text_get_all_price = i.text text_get_all_price_strip = text_get_all_price.strip(' ')

при принте в консоль выходит значения не стрипнутое на 20 000 видно что есть пробел , а надо что бы цифра выглядела таким образом 20000 что бы в последствии провести проверку isdigit()
Отслеживать
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
задан 13 дек 2021 в 12:18
BadTrip174 BadTrip174
35 8 8 бронзовых знаков
Интересный нюанс с пробелами при чистке текстов функцией preg_replace

При чистке текстов регулярными выражениями в PHP я столкнулся с интересной проблемой — некоторые пробелы игнорировались. Поиск и устранение проблемы отняло у меня не мало времени, был получен полезный опыт.
Задача состояла в том, чтобы очистить пустые абзацы в самом начале текста во множестве статей, поскольку эти абзацы там не нужны и портят общий вид статьи.
Проводим исследование
Для выполнения задачи по чистке кусков кода, представляющего пустые абзацы, я решил использовать регулярные выражения (RegExp) в PHP. Простой функцией замены подстроки здесь не обойтись, поскольку вариантов и комбинаций может быть много.
Вот некоторые варианты HTML кода, которые присутствовали в тексте и выводили пустые абзацы:
Как видим, между тегами может быть пробел, может быть его HTML-код, а также может и вовсе не быть никакого символа. Чистка таких строчек кода в текстах выполнялась регулярным выражением:
$txt=preg_replace( '#^( |s| )+
#is' , '' , $original_text );
Статьи которые содержали ненужные пустые абзацы избавились от пустот, но в некоторых пустые абзацы вначале все же остались, посмотрев исходный код HTML одной из таких статей я увидел следующее:
Странно. два тега и несколько пробелов, возможно что-то упущено. Запустил чистку приведенным выше регулярным выражением еще раз — ничего не изменилось.
Что же это за мистика? Скопировал этот кусок кода с пробелами в буфер обмена и забросил в конвертер Text->Hex (http://www.swingnote.com/tools/texttohex.php), получаю результат:
Hex Spaced: 3c 70 3e 20 20 20 20 20 3c 2f 70 3e
Не видно ничего необычного: «20» (x20) — это код обычного пробела, функция должна была очистить эту строчку.
Решил написать регулярное выражение конкретно для этого случая:
$txt=preg_replace( '#^x20+
#is' , '' , $original_text );
Это регулярное выражение так и не очистило указанную строчку (не заменило на пустую) – пробелы окутанные двумя тегами остались на своем месте.
Возможно что при копировании текста из браузера в буфер обмена символы как-то конвертируются, нужно как-то это все проверить.
Поможет HEX-редактор
Для выяснения что же представляет из себя эта загадочная строчка кода с двумя тегами и пробелами, решил применить HEX-редактор.
Текст был сохранен в файл с помощью PHP-функции «file_put_contents». Для того, чтобы просмотреть текстовый файл в HEX-формате, пригодилась программа под названием «HxD».
HxD — это бесплатный HEX редактор (http://mh-nexus.de/en/hxd/), программа маленького размера, бинарный файл в несколько сотен килобайт.
Открыв в HxD ранее сохраненный в файл текст строки я увидел следующее:
3C 70 3E A0 20 A0 A0 A0 3C 2F 70 3E
Оказалось что между тегами присутствуют символ с кодом A0 (xA0), а также один символ пробела с кодом 20 (x20).
Посмотрев в таблицу с кодами символов стало понятно что это за символ с кодом xA0. Это тот же самый пробел только НЕРАЗРЫВНЫЙ:
Dec
Hex
Symbol
HTML Number
HTML name
Description
160
A0
non-breaking space
32
20
space
Дополнив шаблон регулярного выражения кодом данного символа, функция выполнила чистку как положено:
$txt=preg_replace( '#^[xA0x20]+
#is', '' , $original_text );
Заключение
Не спеша, я потратил несколько часов времени чтобы разобраться с данным нюансом. Был получен интересный опыт и проблема решена! Вот такая вот магия .
P.S. Работы проводились на PHP 5.3;
Почему при сохранении в JSON, python добавляет NBSP?
Здравствуйте.
Помогите пожалуйста разобраться с проблемой:
при сохранении спарсеного текста в json файл в некоторых местах получаю NBSP. Подскажите как это удалить? при выводе в консоль этого нет, но если скопировать из консоли текст и куда то вставить то тоже есть. Если открыть не в Pycharm то опять пропадают. Можно ли удалить их так как они создают ненужные пробелы и .replace(‘ «, ») их не берет((
Спасибо!

- Вопрос задан более года назад
- 590 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2

Владимир Коротенко @firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Вы сами сказали что у вас случилось. Вы парсите файл, в нем есть неразрывные пробелы. Поэтому питон сохраняет то что вы ему даете. Все правильно. Pycharm отображает спец символы, это тоже правильно и это можно отключить.
U+202F
поэтому делаете так
Ответ написан более года назад
Нравится 1 2 комментария
DimonfromChehov @DimonfromChehov Автор вопроса
Спасибо за ваш ответ. К сожалению не сработало(( Я только начинаю изучать python и для подопытного взял сайт m видео и попробовал спарсить товар. Вот как раз при получении цены товара получаются эти отступы. значок рубля тоже почему то удалить не получается.

Владимир Коротенко @firedragon
DimonfromChehov, значит что то пошло не так.
Показывайте код.
Вот что я вижу на мвидео
29 999 ₽