276

Re: AHK: Регулярные выражения

Нужны любые формы слов "вагон" и "подошел", которые находятся друг от друга на расстоянии 10 слов.

277

Re: AHK: Регулярные выражения

А какие формы могут быть у слова "подошел\w+"?

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

278 (изменено: DD, 2018-05-03 05:15:02)

Re: AHK: Регулярные выражения

Как уже сказал, это было предусмотрено на случай, если в словах окончания будут, чтобы они учитывались, чтобы затем мои правки не сделали шаблон нерабочим. То есть, находится слово "подошел" с неким возможным окончанием (как если бы оно могло быть), затем до десяти слов от слова "подошел". Первым в примере будет найден "вагон" без окончания — поэтому в этом месте поиск обрывается, найденное обрамляется (например) и продолжается новый поиск соответствий. Дальше идёт "вагонов", после которого нет слова "подошел" на заданном расстоянии, поэтому следующая пара будет найдена через несколько предложений. Схема такая:

подошел\w+ [до десяти слов] вагон\w+
вагон\w+ [до десяти слов] подошел\w+

279

Re: AHK: Регулярные выражения

А если первым найдено "подошел\w", то следующим должно быть "вагон\w", или может быть опять "подошел\w"?

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

280

Re: AHK: Регулярные выражения

Да, если первым найдено "подошел\w", то следующим должно быть "вагон\w" — и наоборот.

281

Re: AHK: Регулярные выражения

Боюсь, одним выражением такое недостижимо.

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

282 (изменено: DD, 2018-05-03 12:23:02)

Re: AHK: Регулярные выражения

Недостижимо однократно найти от слова до слова в диапазоне десяти слов, — то есть, захватить слова

[подошел\w+|вагон\w+].*?[подошел\w+|вагон\w+]

и до десяти слов между ними? Это из-за возможной пунктуации между слов?

283

Re: AHK: Регулярные выражения

Не знаю, как указать что второе вхождение шаблона не должно соответствовать первому.

text =
(
Пройдя мимо длинных рядов всяких товаров, я подошел к рабочим, медленно подошел нагруженный вагон. Передвижение на себе вагонов и очистку платформ от снега, как я узнал потом, рабочие обязаны делать бесплатно. Это стоит и в печатном условии. Рабочие были такие же оборванные и исхудалые, как и те, с которыми я говорил. Когда они докатили вагон до места и остановились, я подошел к ним и спросил, когда они стали на работу и когда обедали. Мне ответили, что стали на работу в 7 часов, а обедали только сейчас. Так по работе надо было, не отпускали.
)

while RegExMatch(text, "O)(*UCP)((подошел|вагон)\w*)(\W+\w+){1,10}?\W+(?1)(?=\W)", match, match ? match.Pos + match.Len : 1)
   MsgBox, % match[0]

Хотя не исключаю, что это всё-таки как-то возможно, используя "Special Backtracking Control Verbs".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg
+ DD

284 (изменено: DD, 2018-05-04 11:26:08)

Re: AHK: Регулярные выражения

А возможен ли будет в рамках одного шаблона формат с перебором двух вариантов, прописанных через «|» — с поиском сначала «подошел ... вагон», а потом  «вагон ... подошел»? Пробовал это на примере — не сработало.

285 (изменено: DD, 2018-05-04 18:26:32)

Re: AHK: Регулярные выражения

Вот так вроде пошло, спасибо:


text =
(
Пройдя мимо длинных рядов всяких товаров, я _подошел к рабочим, медленно подошел нагруженный вагон_. Передвижение на себе вагонов и очистку платформ от снега, как я узнал потом, рабочие обязаны делать бесплатно. Это стоит и в печатном условии. Рабочие были такие же оборванные и исхудалые, как и те, с которыми я говорил. Когда они докатили _вагон до места и остановились, я подошел_ к ним и спросил, когда они стали на работу и когда обедали. Мне ответили, что стали на работу в 7 часов, а обедали только сейчас. Так по работе надо было, не отпускали.
Пройдя мимо длинных рядов всяких товаров, я _подошел к рабочим, медленно подошел нагруженный вагон_. Передвижение на себе вагонов и очистку платформ от снега, как я узнал потом, рабочие обязаны делать бесплатно. Это стоит и в печатном условии. Рабочие были такие же оборванные и исхудалые, как и те, с которыми я говорил. Когда они докатили _вагон до места и остановились, я подошел_ к ним и спросил, когда они стали на работу и когда обедали. Мне ответили, что стали на работу в 7 часов, а обедали только сейчас. Так по работе надо было, не отпускали.
)
while RegExMatch(text, "O)(*UCP)(подошел\w*)(\W+\w+){1,10}?\W+(вагон\w*)|(вагон\w*)(\W+\w+){1,10}?\W+(подошел\w*)", match, match ? match.Pos + match.Len : 1)
   MsgBox, % match[0]

А это в шаблоне перебор от одного до десяти слов? — «(\W+\w+){1,10}?\W+»?

286

Re: AHK: Регулярные выражения

Да.

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

287

Re: AHK: Регулярные выражения

Как задать шаблон для поиска одного или нескольких </div>, чтобы находились следующие варианты? —

...
</div></div></div></div></div>
</div></div></div></div>
</div></div></div>
</div></div>
</div>

288

Re: AHK: Регулярные выражения

В предыдущем ответе использовали же этот шаблон: {1,10}.

289

Re: AHK: Регулярные выражения

А как применять?

match4 =
(
</div></div></div></div>
)
   match4 := RegExReplace(match4, "s)(</div>{1,10}?)", "«$1»")

MsgBox % match4

290

Re: AHK: Регулярные выражения

В справке же все написано:

{min,max}
Означает, что предыдущий элемент (символ, символ из перечня, или подшаблон) может быть повторен некоторое число раз.

В круглые скобки заключают группы элементов, чтобы:

    Определить порядок оценивания. Например, стол(|а|у|ом|е) соответствует падежам слова стол.
    Применять *, ?, +, и {min,max} к последовательности символов, а не к одному символу. Например, (пра)+ совпадает с повторяющейся приставкой "пра"; таким образом, находит "праправнук" и "прапрапрадед", но не находит "предок".
    Выделить некоторый подшаблон, например точка-звездочка: abc(.*)xyz.

291 (изменено: DD, 2018-05-14 23:01:07)

Re: AHK: Регулярные выражения

Пробовал по-всякому, не идет. Мне надо, чтобы в результате в кавычки обернулись все </div>, при том что в поиске будет указан — один </div>.

292

Re: AHK: Регулярные выражения

DD пишет:
match4 := RegExReplace(match4, "s)(</div>{1,10}?)", "«$1»")

У вас {1,10} здесь к чему относится? Вопросительный знак что означает?

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

293 (изменено: DD, 2018-05-14 22:55:09)

Re: AHK: Регулярные выражения

Это я в свете совета Malcev'а просто прикидывал. Так тоже не вытанцовывается —

match4 =
(
</div></div></div></div></div></p>
)
   match4 := RegExReplace(match4, "s)([</div>]+)", "«$1»")

MsgBox % match4

294

Re: AHK: Регулярные выражения

Это легко проверить:

match4 =
(
<<<<<<<<#NoTrayIcon
)
   match4 := RegExReplace(match4, "s)([</div>]+)", "«$1»")

MsgBox % match4 
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

295

Re: AHK: Регулярные выражения

Или как я отредактировал в предыдущем посте... Но как же правильно?

296

Re: AHK: Регулярные выражения

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

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

297

Re: AHK: Регулярные выражения

DD, а зачем вы квадратные скобки используете?

var = aaaababbb
RegExMatch(var, "[ab]+", match)
MsgBox % match
RegExMatch(var, "(ab)+", match)
MsgBox % match
+ DD

298

Re: AHK: Регулярные выражения

Ах вон оно как)). Спасибо!