Имя: Пароль:
   
1C
 
Разбор текста на слова
0 НовыйУчастник Форума
 
29.10.09
14:33
Подскажите, регулярку или может уже кто делал - чтобы из текста только слова получить:

Подскажите
регулярку
или
может
уже
кто
делал
чтобы
из
текста
только
слова
получить
1 skunk
 
29.10.09
14:37
заменить пробелы разделителем строк... и далее работать как с многострочным текстом
2 Живой Ископаемый
 
29.10.09
14:37
(1) +500
3 drumandbass
 
29.10.09
14:38
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока Истина Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока Истина Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить

УПП - ОбщегоН
4 skunk
 
29.10.09
14:42
// на тот случай если будут двойные пробелы
пока найти(стрТвоя, "  ") > 0 цикл
   стрТвоя = стрзаменить(стрТвоя, "  ", " ");
конеццикла;
стрТвоя = стрзаменить(стрТвоя, Символы.ПС);
для х = 1 по СтрЧислоСтрок(стрТвоя) цикл
   сообщить(СтрПолучитьСтроку(стрТвоя, х));
конеццикла;
5 skunk
 
29.10.09
14:43
(3)ужас
6 hulio_ekb
 
29.10.09
14:44
(1) Еще можно заменить все разделители слов (пробелы, точки, запятые и т.д.) на запятые, а затем просто запихать это в структуру:
Слова = Новый Структура(ИсходнаяСтрока);
7 НовыйУчастник Форума
 
29.10.09
14:45
(1)(3) угу, спасиб
8 НЕА123
 
29.10.09
14:45
МассивСлов = Новый Массив;
Стр = СтрЗаменить(" ",Символы.ПС);

Для к = 1 По СтрЧислоСтрок(Стр) Цикл
     СтрСтр = СтрПолучитьСтроку(Стр, к);
     Если НЕ ПустаяСтрока(СтрСтр) Тогда
         МассивСлов.Добавить(СтрСтр);
     КонецЕсли;      
КонецЦикла;
9 НовыйУчастник Форума
 
29.10.09
14:47
(6) ну сбсна меня знаки препинания и волнуют...как от них текст очистить
10 НЕА123
 
29.10.09
14:47
(6)
точно.
11 Живой Ископаемый
 
29.10.09
14:48
2(6) хм.. тоже способ...
12 skunk
 
29.10.09
14:49
стрТвоя = стрзаменить(стрТвоя, ".", "");
стрТвоя = стрзаменить(стрТвоя, ",", "");
13 НЕА123
 
29.10.09
14:53
(6)
с числами только проблема. но все-равно хороший способ.
14 hulio_ekb
 
29.10.09
14:55
(13) Ну да, с цифрами косяк, если перед ними нет букв :)
15 hulio_ekb
 
29.10.09
14:56
(9) Тебе уже вроде везде писали про функцию "СтрЗаменить()" ;)
16 НовыйУчастник Форума
 
29.10.09
15:03
(15) да это ясно...щас попробовал в структуру врубить
Ошибка при вызове конструктора (Структура): Недопустимое значение параметра (параметр номер '1')
   Структура = Новый Структура(Текст);
по причине:
Недопустимое значение параметра (параметр номер '1')

хотя щас просто обычный текст - Текст получается словами через запятую...
17 НовыйУчастник Форума
 
29.10.09
15:05
(16) а ну вопщем надо лучше "чистить" строку - тогда все ок
18 НовыйУчастник Форума
 
29.10.09
15:05
всем спасибо
19 wertyu
 
29.10.09
15:06
Структура = Новый Структура("Текст", Текст);
20 hulio_ekb
 
29.10.09
15:10
(16) У тебя действительно с параметром что-то не так: либо ты не текст передаешь, либо текст с какими-нибудь символами лишними (должны быть только слова, разделенные запятыми), либо у тебя текст начинается с цифры.
Попробуй даже в табло введи выражение "Новый структура("ПервоеСлово, Слово2")" - возвращается структура
21 НовыйУчастник Форума
 
29.10.09
15:19
(20) да да все ок, я понял что должно быть все четко...регуляркой бы какой нить текст от символов корректно почистить бы...а то стрзаменить лениво =)
22 НЕА123
 
29.10.09
15:35
(21)
СТр= ИсходнаяСтрока;
НеБуквоЦифры ="!@#$%^&(*)";
Для к =1 по СтрДлина(НеБуквоЦифры) Цикл
   Стр = СтрЗаменить(Стр, Сред(НеБуквоЦифры,к,1), " ");
КонецЦикла;
23 Живой Ископаемый
 
29.10.09
15:45
Функция апРазложитьСтрокуВМассивПодстрок(Стр) Экспорт
   RegExp = Новый COMОбъект("VBScript.RegExp");
   Результат = Новый Массив();
   
   RegExp.IgnoreCase = Ложь; //Игнорировать регистр
   RegExp.Global = Истина; //Поиск всех вхождений шаблона
   RegExp.MultiLine = Ложь; //Многострочный режим
   
   RegExp.Pattern = "(?:^|;)(\""(?:[^\""]+|\""\"")*\""|[^;]*)"; //вот наш супер шаблон
   //RegExp.Pattern = ";|;|;|;|;;|;|;|;|;|;|;|;|;;|;|;"; //вот наш супер шаблон
   Matches=RegExp.Execute(Стр);
   ЧислоВхождений=Matches.Count();
   //Сообщить(Стр,СтатусСообщения.Важное);
   Если ЧислоВхождений>0 Тогда
       Для к = 0 По ЧислоВхождений-1 Цикл
           Match = Matches.Item(к);
           
           SubMatches = Match.SubMatches;
           ЧислоПодвыражений=SubMatches.Count();
           Для н = 0 По ЧислоПодвыражений-1 Цикл
               SubMatch=SubMatches.Item(н);
               Если SubMatch="" Тогда
                   //Продолжить;
               КонецЕсли;    
               Результат.Добавить(SubMatch);
               //Сообщить("Подстрока: "+SubMatch);
           КонецЦикла;    
       КонецЦикла;
   Иначе
       //Сообщить("Вхождений шаблона не найдено");
   КонецЕсли;
   Возврат Результат;
КонецФункции


Этот РегЕксп раскалдывает строку разделенную точками с запятыми в массив подстрок, при чем например вот такая строка:
===
ПервоеПоле;"Второе ; поле"
===
Будет разложена в массив с двумя элементами -
первый будет равен "ПервоеПоле" (без кавычек)
Второй будет равкн "Второе ; поле" (тоже без кавычек)
24 bvn13
 
29.10.09
15:47
в закладки
25 Лефмихалыч
 
naïve
29.10.09
15:53
(23) а не проще

RegExp.Pattern = "\s+"

?
26 Лефмихалыч
 
naïve
29.10.09
15:54
(25) не проще, это же всего лишь спэйсы, а не пунктуация...
Независимо от того, куда вы едете — это в гору и против ветра!