1 (изменено: Akatosh, 2016-11-26 12:33:25)

Тема: AHK: RegExMatch - сохранение целого слово с совпадением

В переменной book сохранен большой текст. Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (Русь, русский, белорус, брусок, русалка, и т.д.). И каждое из этих слов сохранялось в массив words, с растущим индексом по порядку поиска ( words[0] = Русь; words[1] = русский и т.д. )
Слова с совпадением должны сохраняться целиком (целое слово, с границами по бокам).

P.S. Все названия случайны и созданы только для примера)

2

Re: AHK: RegExMatch - сохранение целого слово с совпадением

text =
(
В переменной book сохранен большой текст. Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (Русь, русский, белорус, брусок, русалка, и т.д.). И каждое из этих слов сохранялось в массив words, с растущим индексом по порядку поиска ( words[0] = Русь; words[1] = русский и т.д. )
Слова с совпадением должны сохраняться целиком (целое слово, с границами по бокам).
)

words := []
while RegExMatch(text, "iO)[а-я]*рус[а-я]*", match, A_Index = 1 ? 1 : match.Pos(0) + match.Len(0))
   words.Push(match[0])

; проверка
for k, v in words
   MsgBox, % k ": " v
Akatosh пишет:

words[0] = Русь

Индексы массивов в AHK начинаются с единицы.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: serzh82saratov, 2016-11-26 20:08:23)

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Мне вот интересно почему только одно совпадение:

Haystack = 
(
Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (, русский, белорус, брусок, русалка, и т.д.).
)

RegExMatch(Haystack, "Oi)(*UCP)\b(\w*?рус\w*)\b", words)

MsgBox % words[1] "`n" words.Count()

В круглые скобки заключают группы элементов, чтобы:
***
Например, функция RegExMatch() в своем выходном массиве может сохранить соответствия всех выделенных подшаблонов

Если NeedleRegEx содержит захватывающие подшаблоны, их совпадения сохраняются в массиве, чьё базовое имя то же, что и у OutputVar. Например, если её имя Match, подстрока, найденная первым подшаблоном, сохранится в переменную Match1, вторым - в Match2 и т.д.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Один подшаблон выделен — одно совпадение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Да забываю, подумал по аналогии с RegExReplace, если он все заменяет, то Match все находить должен.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Haystack = 
(
Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (, русский, белорус, брусок, русалка, и т.д.).
)

MsgBox % RegExReplace(Haystack, "Oi)(*UCP)\b(\w*?рус\w*)\b")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: RegExMatch - сохранение целого слово с совпадением

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: Malcev, 2016-11-26 20:35:18)

Re: AHK: RegExMatch - сохранение целого слово с совпадением

teadrinker, serzh82saratov, в ваших кодах не учтены слова пишущиеся через дефис.

9

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Да, можно добавить:

book =
(
В переменной book сохранен большой русско-английский текст. Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (Русь, русский, белорус, брусок, русалка, и т.д.). И каждое из этих слов сохранялось в массив words, с растущим индексом по порядку поиска ( words[0] = Русь; words[1] = русский и т.д. )
Слова с совпадением должны сохраняться целиком (целое слово, с границами по бокам).
)

words := []
while RegExMatch(book, "iO)[-а-я]*рус[-а-я]*", match, A_Index = 1 ? 1 : match.Pos(0) + match.Len(0))
   words.Push(match[0])

; проверка
for k, v in words
   MsgBox, % k ": " v
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Кстати, вот так можно как бы за раз:

book = 
(
В переменной book сохранен большой русско-английский текст. Я хочу из всего текста вычленить только слова, в которых содержится сочетание "рус" (Русь, русский, белорус, брусок, русалка, и т.д.). И каждое из этих слов сохранялось в массив words, с растущим индексом по порядку поиска ( words[0] = Русь; words[1] = русский и т.д. )
Слова с совпадением должны сохраняться целиком (целое слово, с границами по бокам).
)
words := []
RegExReplace(book, "i)[-а-я]*рус[-а-я]*(?Cf)")

; проверка
for k, v in words
   MsgBox, % k ": " v

f(m)  {
   global words
   words.Push(m)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: RegExMatch - сохранение целого слово с совпадением

teadrinker пишет:

Кстати, вот так можно как бы за раз:

CallOut по сути тот же цикл.

Malcev пишет:

teadrinker, serzh82saratov, в ваших кодах не учтены слова пишущиеся через дефис.

Вроде находит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Вроде находит.

Находит только одну часть слова.
Попробуй со словом - "русско-английский".

13

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Haystack = 
(
английский iрусско-английскийi русско английский
)

RegExMatch(Haystack, "Oi)(*UCP)\b(\w*?русско-английский\w*)\b", words)

MsgBox % words[1] "`n" words.Count()
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Я имею в виду вот что:

Haystack = 
(
русско-английский словарь
)

RegExMatch(Haystack, "Oi)(*UCP)\b(\w*?рус\w*)\b", words)

MsgBox % words[1] "`n" words.Count()

Слово "русско-английский" разбивается.

15 (изменено: serzh82saratov, 2016-11-27 23:49:52)

Re: AHK: RegExMatch - сохранение целого слово с совпадением

Тогда наверное так:

Haystack = 
(
русско-английский словарь
)
 
RegExMatch(Haystack, "Oi)(*UCP)((?:\w|-)*?рус(?:\w|-)*)", words)

MsgBox % words[1] "`n" words.Count() 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui