Перейти из форума на сайт.


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Открыть новую тему     Написать ответ в эту тему

Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Есть документ в котором полно разного текста между обыкновенными круглыми скобками во всем документе.
Подразумевается ли под "полно разного текста" многоуровневое вложение скобок, а также что-то типа закавыченных строк, в которых скобки не считаются скобками?
Выложили бы вы здесь коротенькую вырезку из вашего примера, а то качать 16 МБ ради посмотреть - никому не хочется.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 11:05 24-01-2018
mirvery

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не помогло. Удалилось и содержимое скобок и то, что между скобками, т.е. между ) и следующей открывающей (.
 

Всего записей: 20 | Зарегистр. 26-12-2017 | Отправлено: 12:08 24-01-2018 | Исправлено: mirvery, 12:20 24-01-2018
VVL99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery
Опять же не видел вашего текста, но вот с этим примером:

Код:
текст1из6 ((коммент1) текст2из6 (коммент2)) текст3из6
(коммент3 ) текст4из6 ( коммент4)
текст5из6 ((коммент5) (коммент6)) текст6из6

 Получилось так:

Код:
текст1из6 текст2из6 текст3из6
текст4из6  
текст5из6 текст6из6
Вроде всё корректно

Всего записей: 1410 | Зарегистр. 03-02-2011 | Отправлено: 16:16 24-01-2018 | Исправлено: VVL99, 16:17 24-01-2018
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery

Цитата:
Не помогло.

Не помогло потому, что необходимо давать полные условия... вот, выше человек правильно уточняет: а есть ли вложенные скобки? В этом всё дело - они есть, причем очень многоуровневые и регэксп, соответственно, будет другим. И да, кроме того, существуют непарные скобки... в общем, задача из простой, уже превращается, превращается... в элегантные шорты, в смысле, что задача уже не выглядит столь тривиально.
Или запускайте регэксп столько раз, сколько есть уровней вложения:

Код:
\([^\(\)]+\)

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

Всего записей: 1761 | Зарегистр. 03-02-2009 | Отправлено: 16:59 24-01-2018
sikemo

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот я себе накатал для удаления лит-ры в [ скобках типа [1, 3] и скобок (если так какой-то текст), но на автомате проганять не надо, ибо удалит много лишнего
 
\s?\[.+?\]|\(.+\)    //прибирає посилання на літ-ру у дужках (), []
это для приведения текста для гугл-читалки, чтоб не читала лишнюю белиберду. все индивидуально. А так текст  выкладывайте, фрагмент пока скачивать не будем

Всего записей: 1019 | Зарегистр. 27-11-2008 | Отправлено: 19:12 24-01-2018
regist123



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery 13:08 24-01-2018
Цитата:
Не помогло. Удалилось и содержимое скобок и то, что между скобками, т.е. между ) и следующей открывающей (.

1) Вы бы лучше писали какую/какие регулярки вы пробовали. Тут несколько разных вариантов дали и они немного отличаются.
2) Ответили бы на вопросы, которые вам задали. В частности Dronton2 12:05 24-01-2018
Цитата:
Подразумевается ли под "полно разного текста" многоуровневое вложение скобок, а также что-то типа закавыченных строк, в которых скобки не считаются скобками?

И дополню вопросом, который уже задавал на предыдущей странице. В случае многоуровневых скобок надо удалять скобки любого уровня вложенности или только самые внутренние?
 
И по документу, я его скачал, а не открывался он из-за того, что это оказывается переименованный .docx
Вот текст с первой страницы (там 1348 страниц, всё просто для примера )
ps/ движок форума искажает юникод. Пришлось море заменить на ссылку.

----------
FAQ по восстановлению аккаунтов
Подфорум для раздач

Всего записей: 5623 | Зарегистр. 20-03-2009 | Отправлено: 21:08 24-01-2018 | Исправлено: regist123, 21:11 24-01-2018
mirvery

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот смотрите, какой текст:
 

Цитата:
µgreifen2I.S.V. zulangen /hinlangen /langen nachlangenB75  (Ik „lang“ mit de rechte Hand no de Schēēr.BUR03.052 – Dō lang de annere no sien Bēērglas.BUR04.076 – Mâren*„lang“ no ėn annern Linnenbolten un wickel ėm af.FEJ5.3.162); tōlangen  (Inf:BEI TISCH: Hē schull blōōt „tolangn“!GRK5.2.263 – Prs:UNBESCHEIDEN:Hē langt ümmer no dėn dicksten Ėnn. – Prt:GESCHICKT ZUGREIFEN: Sē lang tō|„lang to“ un hârr ėm, dėn Tähn.LAF17.058) hinter sich greifenachter sik langen (Sē langt achter sik, grippt no de Handtasch.BUR08.14) I.S.V. ergreifen /in die Hand nehmengriepenB32 (Wėnn du ėn Lünsch mit’e Hand griepen wullt, muttst du;m Solt op’n St;rt streuen!); snappenB91 (Prt:Wi „snappen“sik|unsX07a ėn ōlen Sack.MAG8.039)èLuftWG.snappenèArm2WG.GriepârmèSpatzWG.Lünschèfassen1 (ergreifen) WG.packen, tō foten kriegen|footkriegen,…èzulangen (BEIM ESSEN; Chance wahrnehmen)ènötigen (BEIM ESSEN)èzugreifen2 (gierig nach etw. greifen)ènehmen2 (nach etw. greifen) WG.herkriegen, herlangenèschnappen

 
Нужно удалить весть текст в скобках и сами эти скобки, т.е. текст вместе со скобками. И так - во всем документе.  
 
Вот выложил txt-файл - http://rgho.st/private/7C44B5MYf/cc5cbefe97891725b9cfb88e32646428
 
Я в регулярках вообще ничего не поимаю.
 
Мне для создания словаря для Lingvo нужны будут только некоторые регулярки.  
 
Например, удаление разного текста между двумя определенными символами во всем тексте; добавление в начало и конец каждой строки определенного содержимого (тэгов); перенос содержимого строки на новую после первого слова в каждой строке (слово остается, а перевод - т.е. вся последующая часть строки) должна перенестись ниже с отступом от края строки в 3 пробела, скажем.
 
 
 

Всего записей: 20 | Зарегистр. 26-12-2017 | Отправлено: 16:11 29-01-2018 | Исправлено: mirvery, 16:23 29-01-2018
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery
Вы, наверное, думаете, что если задать вопрос несколько раз, то получите какой-то другой ответ?
 

Цитата:
Нужно удалить весть текст в скобках и сами эти скобки, т.е. текст вместе со скобками.

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

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

Код:
\([^\(\)]+\)

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

Всего записей: 1761 | Зарегистр. 03-02-2009 | Отправлено: 16:25 29-01-2018
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я в регулярках вообще ничего не поимаю.  
 
Мне для создания словаря для Lingvo нужны будут только некоторые регулярки.
Если вы в регулярках ничего не понимаете, то почему решаете задачу именно с их помощью? Если вы не можете чётко сформулировать задачу, в которой есть и удаление, и добавление, и перенос, то, может быть, проще решить задачу методами императивного программирования? (т.к. постановка задачи может неоднократно поменяться, и регулярку каждый раз, может быть, придётся переписывать заново. А в императивном алгоритме, если он изначально составлен правильно, нужно будет только внести некоторые очевидные изменения)

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 10:23 30-01-2018 | Исправлено: Dronton2, 10:24 30-01-2018
mirvery

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Если вы в регулярках ничего не понимаете, то почему решаете задачу именно с их помощью? Если вы не можете чётко сформулировать задачу, в которой есть и удаление, и добавление, и перенос, то, может быть, проще решить задачу методами императивного программирования? (т.к. постановка задачи может неоднократно поменяться, и регулярку каждый раз, может быть, придётся переписывать заново. А в императивном алгоритме, если он изначально составлен правильно, нужно будет только внести некоторые очевидные изменения)  

 
А потому что мне надо распознанный текст как можно более автоматически привести в тот вид, когда останется только тэги расставить и скомпилировать словарь для Lingvo. Сами как думаете, что лучше: вручную каждую строку (а их там несколько десятков тысяч) исправлять и редактировать, или как-то автоматизировать процесс?
 
\([^\)]+\)  - это помогло, большое спасибо!
 
А чтобы в вордовском документе что-либо подобное делать (doc-формат), есть какие-нибудь программы или регулярки для ворда?
 

Всего записей: 20 | Зарегистр. 26-12-2017 | Отправлено: 14:42 30-01-2018 | Исправлено: mirvery, 15:04 30-01-2018
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery

Цитата:
\([^\)]+\)  - это помогло, большое спасибо!  

А Вы перепроверьте, всё же, ибо для вложенных конструкций этот регэксп совсем не подойдет, т.к. могут быть удалены по одной лишней скобке из парных.
От такой конструкции:

Код:
(abc(sdf(def)ghj)jkl)

останется "хвост":

Код:
ghj)jkl)

который по условию оставаться не должен...
 
А вот, три раза запущенный шаблон:

Код:
\([^\(\)]+\)

удалит конструкцию без хвостов.

Всего записей: 1761 | Зарегистр. 03-02-2009 | Отправлено: 15:14 30-01-2018 | Исправлено: YuS_2, 15:16 30-01-2018
sikemo

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а кстати, щас только обратил внимание на текст, — возможно, вам и не стоит его усекать, посмотрите, все ли умлауты — 
эти – Mâren*„lang“ no ė  
1) у вас в исходном тексте пеереданы правильно и
2) возможно, пометы стан необходимы при построении словарных статей для Lingvo
там,  можно после заглавия статьи снабдить пояснением  
 
zulangen  
(BEIM ESSEN; Chance wahrnehmen)ènötigen
 
перед (BEIM ESSEN; сатвится табуляция.  
 
Сначала разберитесь с форматом, структурой статиьи лингво--словаря, чтобы не потерять после обработки что-то существенное.

Всего записей: 1019 | Зарегистр. 27-11-2008 | Отправлено: 01:03 31-01-2018
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А потому что мне надо распознанный текст как можно более автоматически привести в тот вид, когда останется только тэги расставить и скомпилировать словарь для Lingvo. Сами как думаете, что лучше: вручную каждую строку (а их там несколько десятков тысяч) исправлять и редактировать, или как-то автоматизировать процесс?
Вы меня неправильно поняли. Я вам не предлагаю вручную редактировать каждую строку. Я предлагаю вместо регулярных выражений использовать императивное программирование, т.к. при разборе строк со сложной структурой, проще решить задачу императивными алгоритмами.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 10:39 31-01-2018
mirvery

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В программировании не силен.
 
Повторю вопрос: есть ли инструменты, чтобы в формате doc делать что-либо подобное автоматически?

Всего записей: 20 | Зарегистр. 26-12-2017 | Отправлено: 19:33 31-01-2018
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery
А Вы настойчивый
В Worde, в поиске можно использовать подстановочные знаки, но это далеко не регэкспы. Инструменты требующиеся для замены по Вашему условию, возможно и существуют, но ... документ Word - это не просто текст, а архив с набором файлов xml с данными форматирования, стилей и прочего... в общем, задача не совсем простая.
Если устроит решение для plain text (простой текст), то вот пример на powershell и с описанным выше регэкспом:

Код:
$infile = 'in.txt'
$outfile = 'out.txt'
$enc1 = [text.encoding]::getencoding("UTF-8")
$regexp = "\([^\(\)]+\)"
 
$a = [io.file]::readalltext($infile, $enc1)
do {
    $b = $a|%{
        $_ -replace $regexp
    }
    $a = $b
}
while ($b -match $regexp)
$a|out-file $outfile

- работать должен с версии powershell 2.0. Запускать скрипт в одном каталоге с входящим файлом, либо указать к нему абсолютный путь, в данном примере это in.txt
 
ЗЫ  
1. Кстати, powershell умеет вытаскивать текст из документов word, но код будет посложнее и мне очень лениво запускать думалку в этом направлении...
2. Только с вопросом: как запускать и прочими, относительно powershell, необходимо перейти в соответствующую ветку, здесь это оффтопом будет.

Всего записей: 1761 | Зарегистр. 03-02-2009 | Отправлено: 20:57 31-01-2018 | Исправлено: YuS_2, 21:00 31-01-2018
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Повторю вопрос: есть ли инструменты, чтобы в формате doc делать что-либо подобное автоматически?
С документами в формате doc лучше всего работает MS Word. В нём есть Visual Basic или что-то подобное (точно не могу сказать, т.к. уже лет 20 ничего не писал на VBA).
На форуме есть ветка, специально посвящённая Word VBA: http://forum.ru-board.com/topic.cgi?forum=33&topic=5312&start=760

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 11:50 01-02-2018
mirvery

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё задолбало!
 
Буду потихончеку тыщщу с лишним страниц текста вручную редактировать!
 
Спасибо за советы и ответы!  
Потом еще поспрашаю

Всего записей: 20 | Зарегистр. 26-12-2017 | Отправлено: 14:19 04-02-2018
YuS_2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery

Цитата:
Буду потихончеку тыщщу с лишним страниц текста вручную редактировать!

Жестоко... по отношению к свободному времени
У Вас же было  24-01-2018:

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


Цитата:
удалятся будет с такого же текста в txt-формате.

Показанное выше решение на powershell, выполняет именно это и всего лишь секунд за 7-8...  
Что именно привело Вас к ручному редактированию?

Всего записей: 1761 | Зарегистр. 03-02-2009 | Отправлено: 21:53 04-02-2018
regist123



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2 22:53 04-02-2018
Цитата:
Показанное выше решение на powershell, выполняет именно это и всего лишь секунд за 7-8...  
 Что именно привело Вас к ручному редактированию?

по мне очевидно - нежелание отвечать на наводящие вопросы. Даже выше регулярки, что выложены не понятно подходят или нет и почему. Если бы он приложил усилия не на повторения одного и того же вопроса, а на разъяснения деталей, то очевидно что помочь смогли бы лучше. А так раз не желает, то зачем уговаривать, чтобы разрешил ему помочь?

----------
FAQ по восстановлению аккаунтов
Подфорум для раздач

Всего записей: 5623 | Зарегистр. 20-03-2009 | Отправлено: 00:01 05-02-2018
DenSyo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mirvery
выложил для вас функцию разбора строки по тэгам
http://forum.ru-board.com/topic.cgi?forum=33&topic=5993&start=1180#lt
 
первый пример показывает ваш случай, поиск тэгов и удаление содержимого между ними.

Всего записей: 94 | Зарегистр. 19-01-2008 | Отправлено: 04:10 05-02-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru