Как разделить строку по заглавным буквам python
Перейти к содержимому

Как разделить строку по заглавным буквам python

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » BeautifulSoup как разделить текст по произвольному тэгу?

#1 Июнь 18, 2018 13:40:24

Sterh Зарегистрирован: 2018-06-18 Сообщения: 17 Репутация: 0 Профиль Отправить e-mail

BeautifulSoup как разделить текст по произвольному тэгу?

Здравствуйте!
В питоне и BS новичек. Долго гуглил, но не нашел, как решить проблему (может не в ту сторону гуглил)

Задача:
Разбить текст посредством BS по произвольному тэгу. Например в коде страницы есть такой кусок:

option value="6">Ассамoption>option value="7">Кенияoption>option value="8">Руандаoption>option value="9">Цейлонoption> 

Между словами пробелов, или переводов строк нет. В результате разбора текста посредством кода:

resp = BeautifulSoup(open(p, encoding='utf-8')) resp.body.text 

Получаю склеенные слова:
“АссамКенияРуандаЦейлонПрефектура”

Вопрос: Как разлеплять подобные вещи, при условии, что:
1) Вместо “option” тэг может быть абсолютно любой (на что хватает фантазии вэбмастера), и каждый раз вычислять что это за тэг не вариант вообще
2) Разделять по заглавным буквам так же не вариант, ибо далеко не факт, что на другой странице слепленные слова будут написаны тоже с заглавных

#2 Июнь 18, 2018 15:05:23

Vladimirv Зарегистрирован: 2013-03-22 Сообщения: 108 Репутация: 7 Профиль Отправить e-mail

BeautifulSoup как разделить текст по произвольному тэгу?

Доки на русском. Смотреть в сторону children, выбираем родителя, пробегаем по деткам и пакуем нужным образом. Все просто)

Отредактировано Vladimirv (Июнь 18, 2018 15:06:07)

#3 Июнь 18, 2018 18:23:53

Sterh Зарегистрирован: 2018-06-18 Сообщения: 17 Репутация: 0 Профиль Отправить e-mail

BeautifulSoup как разделить текст по произвольному тэгу?

Vladimirv
Благодарю за ответ!
Однако я, наверное, не совсем корректно сформулировал задачу. Мне нужно было, что бы НЕ склеивались слова, вне зависимости от того, внутри каких тэгов они расположены. Нужен некий универсальный способ, применимый к любой произвольной вэб-странице. Т.е. искать родителей тоже не вариант.
Пока нашел вот такой вариан:

resp = BeautifulSoup(open(p, encoding='utf-8')) clean_text = ' '.join(resp.body.findAll(text=True)) 

Вроде работает (слова расклеены), но при этом в текст тянется часть тэгов…. Вот вроде такого:

Вход для клиентов Добрый день span id="user_email">span> Личный кабинет Выйти Регистрация

Ап:
А, тэги, которые тянет, закомментированы:

span> 

Ап2:
Если дебил, то это лечится с трудом Удаляем комментарии:

for comment in resp.findAll(text=lambda text: isinstance(text, bs4.Comment)): comment.extract() 

Полностью получается так:

resp = BeautifulSoup(open(p, encoding='utf-8')) # Удаляем все noindex for i in resp.findAll('noindex'): resp.noindex.decompose() # Удаляем скрипты for i in resp.findAll('script'): resp.script.decompose() #Удаляем закооментированные строки for comment in resp.findAll(text=lambda text: isinstance(text, bs4.Comment)): comment.extract() #Получаем строку текста clean_text = ' '.join(resp.body.findAll(text=True)) 

Мож кому пригодится Решение взято тут: http://tinycode.ru/how-to-clean-html-and-strip-tags.html

Отредактировано Sterh (Июнь 18, 2018 18:38:46)

Как строку разделить на текст(по буквам)

Надо, чтобы строка «Hello world!» стала списком [«H», «e», «l», «l», «o», » «, «w», «o», «r», «l», «d», «!»]
Как такое можно сделать?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как разделить слипшийся текст в ячейке по Заглавным буквам и Числам
Как разделить слипшийся текст в ячейке по Заглавным буквам и Числам? При выгрузке из одной.

Разделить текст по заглавным буквам
Всем привет! Вопрос такой: Как в MS Exele разделить текст, который находится в одной строке, по.

Как в Edit разделить слово по буквам и каждой букве предоставить какое-нибудь действие?
Как в Edit разделить слово по буквам и каждой букве предоставить какое-нибудь действие? И чтоб.

Как сделать чтобы текст появлялся по буквам?
Привет всем,давно не был на форуме. У меня возник вопрос,как сделать чтобы текст в TextView.

Эксперт Python

7279 / 4102 / 1794
Регистрация: 27.03.2020
Сообщений: 6,926

Лучший ответ

Сообщение было отмечено BlackLightHack как решение

Решение

BlackLightHack,

print(list("Hello world!"))

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как выдавать текст в combobox по введенным буквам?
Реализация поиска. Есть комбобокс со списком. Как сделать так, чтобы при вводе в комбобокс части.

Как разбить строку по заглавным буквам?
Здравствуйте. Подскажите как разбить строку по заглавным буквам? Пример АнтонПавелИгорь, чтобы были.

Разделить данный текст на слова. Каждое вывести в свою строку
Пропустил эту тему, теперь не могу разобраться :cry:. Помогите пожалуйста составить данную.

Есть JS код, который по буквам выводит текст, как сделать перенос строки?
Всем привет! Есть JS код, который делает эффект печатания текста, т.е. выводит текст по буквам. Как.

Метод должен разделить текст на слова и вернуть строку, состоящую из полученных слов, каждое слово на отдельной строке
Добрый вечер, подскажите пожалуйста куда копать. Дан текст: Everyone could notice that people.

STRING_SPLIT (Transact-SQL)

STRING_SPLIT — это табличное значение функция, которая разбивает строку на строки подстроек на основе указанного символа разделителя.

Уровень совместимости 130

STRING_SPLIT требует, чтобы уровень совместимости был не менее 130. Если уровень меньше 130, ядро СУБД не удается найти функцию STRING_SPLIT .

Сведения об изменении уровня совместимости базы данных см. в статье Просмотр или изменение уровня совместимости базы данных.

Конфигурация совместимости не нужна STRING_SPLIT в Azure Synapse Analytics.

Синтаксис

STRING_SPLIT ( string , separator [ , enable_ordinal ] ) 

Аргументы

string

Выражение любого типа символа (например, nvarchar, varchar, nchar или char).

separator
enable_ordinal

Область применения: База данных SQL Azure, Управляемый экземпляр SQL Azure, Azure Synapse Analytics (только бессерверный пул SQL) и SQL Server 2022 (16.x) и более поздних версий

Выражениеint или bit, которое служит флагом для включения или отключения выходного столбца ordinal . Значение 1 включает ordinal столбец. Если enable_ordinal опущен NULL или имеет значение 0 , ordinal столбец отключен.

Типы возвращаемых данных

Если выходной ordinal столбец не включен, возвращает таблицу с одним столбцом, STRING_SPLIT строки которой являются подстроками. Имя столбца — value . Возвращает значение типа nvarchar, если любой из входных аргументов имеет тип nvarchar или nchar. В противном случае возвращается значение типа varchar. Длина типа возвращаемого значения равна длине аргумента string.

Если аргумент enable_ordinal передается значение 1 , возвращается второй столбец ordinal , состоящий из 1-х значений индексов позиции каждой подстроки в входной строке. Тип возвращаемого значения — bigint.

Замечания

STRING_SPLIT вводит строку с разделителями и вводит один символ для использования в качестве разделителя или разделителя. При необходимости функция поддерживает третий аргумент со значением 0 или отключает или 1 включает соответственно выходной ordinal столбец.

STRING_SPLIT выводит таблицу с одним столбцом или двойным столбцом в зависимости от аргумента enable_ordinal .

  • Если enable_ordinal , NULL опущен или имеет значение 0 , возвращает таблицу с одним столбцом, STRING_SPLIT строки которой содержат подстроки. Имя выходного столбца — value .
  • Если enable_ordinal имеет значение 1 , функция возвращает таблицу с двумя столбцами, включая ordinal столбец, состоящий из 1 значений индексов подстроок в исходной входной строке.

Аргумент enable_ordinal должен быть константным значением, а не столбцом или переменной. Он также должен быть битом или типом данных int со значением 0 или 1 . В противном случае функция вызывает ошибку.

Выходные строки могут быть расположены в любом порядке. Порядок не гарантирует соответствие порядка подстроек во входной строке. Можно переопределить окончательный ORDER BY порядок сортировки с помощью предложения инструкции SELECT , например ORDER BY value или ORDER BY ordinal .

0x0000 (char(0)) — это неопределенный символ в параметрах сортировки Windows и не может быть включен в STRING_SPLIT него.

Пустые строки нулевой длины присутствуют в том случае, если входная строка содержит два или несколько последовательных вхождений знака разделителя. Пустые подстроки обрабатываются так же, как и обычные подстроки. Вы можете отфильтровать все строки, содержащие пустую подстроку, с помощью WHERE предложения, например WHERE value <> » . Если входная строка имеет значение NULL , STRING_SPLIT функция с табличным значением возвращает пустую таблицу.

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

SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' '); 

При выполнении практики предыдущий SELECT возвращает следующую таблицу результатов:

значение
Lorem
ipsum
dolor
sit
amet.

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

SELECT * FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ', 1); 

Затем эта инструкция возвращает следующую результирующую таблицу:

значение ordinal
Lorem 1
ipsum 2
dolor 3
sit 4
amet. 5

Примеры

А. Разделение строки значений с разделителями-запятыми

Следующая инструкция анализирует разделенный запятыми список значений и возвращает все непустые токены:

DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike' SELECT value FROM STRING_SPLIT(@tags, ',') WHERE RTRIM(value) <> ''; 

STRING_SPLIT возвращает пустую строку, если нет ничего между разделителем. Условие RTRIM(value) <> » удаляет пустые маркеры.

B. Разделение строки значений с разделителями-запятыми в столбце

Таблица Product содержит столбец с разделенным запятыми списком тегов, как показано в следующем примере:

ИД продукта Имя. Теги
1 Full-Finger Gloves clothing,road,touring,bike
2 LL Headset bike
3 HL Mountain Frame bike,mountain

Следующий запрос преобразовывает каждый список тегов и соединяет его с исходной строкой:

SELECT ProductId, Name, value FROM Product CROSS APPLY STRING_SPLIT(Tags, ','); 
ИД продукта Имя. Значение
1 Full-Finger Gloves clothing
1 Full-Finger Gloves road
1 Full-Finger Gloves touring
1 Full-Finger Gloves bike
2 LL Headset bike
3 HL Mountain Frame bike
3 HL Mountain Frame mountain

Порядок выходных данных может отличаться, так как порядок не гарантирует соответствие порядка подстроек во входной строке.

C. Объединение по значениям

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

SELECT value as tag, COUNT(*) AS [number_of_articles] FROM Product CROSS APPLY STRING_SPLIT(Tags, ',') GROUP BY value HAVING COUNT(*) > 2 ORDER BY COUNT(*) DESC; 

D. Поиск по значению тега

Разработчикам необходимо создать запросы для поиска статей по ключевым словам. Они могут использовать представленные ниже запросы.

Поиск продуктов с одним тегом (clothing):

SELECT ProductId, Name, Tags FROM Product WHERE 'clothing' IN (SELECT value FROM STRING_SPLIT(Tags, ',')); 

Поиск продуктов с двумя тегами (clothing и road):

SELECT ProductId, Name, Tags FROM Product WHERE EXISTS (SELECT * FROM STRING_SPLIT(Tags, ',') WHERE value IN ('clothing', 'road')); 

Д. Поиск строк по списку значений

Разработчикам необходимо создать запрос, который находит статьи по списку идентификаторов. Они могут использовать следующий запрос:

SELECT ProductId, Name, Tags FROM Product JOIN STRING_SPLIT('1,2,3',',') ON value = ProductId; 

Предыдущее STRING_SPLIT использование является заменой общего антипаттерна. Такой антипаттерн может включать создание динамической строки SQL на уровне приложения или в Transact-SQL. Или можно добиться антипаттерна с помощью LIKE оператора. См. следующую инструкцию: SELECT

SELECT ProductId, Name, Tags FROM Product WHERE ',1,2,3,' LIKE '%,' + CAST(ProductId AS VARCHAR(20)) + ',%'; 

F. Поиск строк по порядковым значениям

Следующая инструкция позволяет найти все строки с четным значением индекса:

SELECT * FROM STRING_SPLIT('Austin,Texas,Seattle,Washington,Denver,Colorado', ',', 1) WHERE ordinal % 2 = 0; 

Приведенная выше инструкция возвращает следующую таблицу:

значение ordinal
Техас 2
Вашингтон 4
Колорадо 6

G. Упорядочение строк по порядковым номерам

Следующая инструкция возвращает разделенные значения подстрок входной строки и их порядковые значения, упорядоченные столбцу ordinal :

SELECT * FROM STRING_SPLIT('E-D-C-B-A', '-', 1) ORDER BY ordinal DESC; 

Приведенная выше инструкция возвращает следующую таблицу:

значение ordinal
А 5
Б 4
О 3
D 2
E 1

Связанный контент

  • LEFT (Transact-SQL)
  • LTRIM (Transact-SQL)
  • RIGHT (Transact-SQL)
  • RTRIM (Transact-SQL)
  • SUBSTRING (Transact-SQL)
  • TRIM (Transact-SQL)
  • Строковые функции (Transact-SQL)

Обратная связь

Были ли сведения на этой странице полезными?

Как разделить слово если оно сливается с большой буквой?

Всем доброго дня!
Есть текст The ingenuity of design within reachNordic minimalist design interpretation of the Solar
и слово reachNordic сливается с reach. Как отделить reach от Nordic и спустить его на новую строку, просто таких слов много, и хотелось бы понять как это работает!
Вообщем там где маленькая буква сливается с большой буквой, та которая с большой переносить на новую строку
Пробовал ‘AbBZxYp’ но почему то не работает!

1 2 3 4 5
rep = ['●', 'AbBZxYp'] for item in rep: if item in article_descr2: article_descr2 = article_descr2.replace(item, '\n●') print(article_descr2)

Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Ввести число. Если оно четное, разделить его на 10, если нечетное — увеличить на 15.
Ввести число. Если оно четное, разделить его на 10, если нечетное — увеличить на 15. Есть версия.

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

Как искать слово в TextBox и если оно найдено, то выделять его
Всем привет! Начал программировать на Visual Basic 2010 express и у меня появилось несколько.

Заменить слово в строке, если оно есть, вывести каждое слово с новой строки и найти самое длинное слово в строке
Нужно создать программу, которая сначала примет заданный текст пользователя, а затем выведет текст.

Вводится текст и слово. Удалить слово из текста, если оно в нем присутствует
Вводится текст и слово. Удалить слово из текста, если оно в нем присутствует.

Автоматизируй это!

Эксперт Python

7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29

тут регулярщики наверное короче всего решат.
Или просто в цикле ищи пару строчная+Заглаваная и заменяй на строчная + \n + Заглавная

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16119 / 9755 / 2730
Регистрация: 21.10.2017
Сообщений: 21,624

Лучший ответ

Сообщение было отмечено Welemir1 как решение

Решение

1 2 3 4
import re s = 'The ingenuity of design within reachNordic minimalist design interpretation of the Solar' print(re.sub(r'(?\w)(?=[A-Z])', '\n', s))
The ingenuity of design within reach Nordic minimalist design interpretation of the Solar

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *