51 (изменено: DD, 2014-10-12 04:05:55)

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

Жаль, простота автохоткейная в программе не идёт)) так думаю, из-за троекратно заданных мест, где искать:

<pre.*?>.*?</pre>|<style.*?>.*?</style>|<script.*?>.*?</script>|<.*?>

Там не иначе, условие нужно по такому принципу строить —

>(.*?)[^<|<style.*?>|<script.*?>|<pre>]*<

или может так —

[^<|<style.*?>|<script.*?>|<pre>]*>(.*?)<

Кстати поиск ещё работает с такой конструкцией — (<)(pre|style|script)([^>]*>.*?</\2>) — но с обратным эффектом: игнорируется всё, что не обрамлено перечисленными тегами.

52

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

DD пишет:

Жаль, простота автохоткейная в программе не идёт

Это не "автохоткейная", а по стандарту PCRE.
Ну, а как в программе, я уж не знаю, экспериментировать нужно.
Ещё вариант:

RegExReplace(Text, "siU)<pre.*>.*</pre>|<style.*>.*</style>|<script.*>.*</script>|<.*>")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

53

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

teadrinker пишет:

Это не "автохоткейная", а по стандарту PCRE.

Он поддерживается — но наверно из-за поиска в секции шаблон не срабатывает.

Что ж, спасибо, Дмитрий. Видимо, там сходу не разобраться и т.д. Справку повнимательней почитаю))

54 (изменено: DD, 2014-10-17 01:25:37)

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

Допустимо ли в рег. выражениях значение найденной цифры представить в виде числа N — и использовать там же? Например, чтобы при поиске вхождения: "некоеслово 5" — результат был бы "некоеслово некоеслово-некоеслово-некоеслово-некоеслово-некоеслово" (5 раз).

55 (изменено: Malcev, 2014-10-17 19:25:42)

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

Например так:

word = слово 3
RegexMatch(word, "(.*) (\d*)", found)
loop %found2%
{
   if A_Index = 1
      output := found1 " " found1
   else
      output .= "-" found1
 }  
msgbox % output
+ DD

56

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

(некоеслово\s(некоеслово){5})

57

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

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

58

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

это и есть рег выражение

59

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

Но не соответствует: нужно-то найти неизвестную цифру и представить её в виде кратного ей количества, т.е. пример должен выглядеть примерно так:

Найти: (\w+\s+)(\d+)

Заменить: $1{$2}
Или: \1{\2}

(найденная цифра становится n-значением).

60

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

Drugoy, не забываем о грамотном правописании.

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

61 (изменено: serzh82saratov, 2014-10-18 10:43:17)

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

Так?

RegexMatch("это не надо, некоеслово 5, это не надо", "(\S+)\s+(\d+)", f)   
loop % f2 out := ""
    out .= A_Index = 1 ? f1 " " f1 : "-" f1  
msgbox % out
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.02 (Unicode 32-bit).
+ DD

62

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

Говорят, что одними регулярными, этого не сделать — надо делить с Автохоткеем.

63

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

DD пишет:

Говорят, что одними регулярными, этого не сделать — надо делить с Автохоткеем.

Не понял, что это значит?

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.02 (Unicode 32-bit).

64

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

serzh82saratov пишет:

Не понял, что это значит?

В Вашем с Мальцевым примерах видно, что вы не обошлись одним лишь RegEx — но решали это вкупе с AutoHotkey.
То и значит))

65

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

Серж, а как подладить Ваш скрипт на замены соответствий в определенном файле, на такой манер? —

FileRead, file, C:\(Group1\wt$index.html

RegexMatch(file, "(\S+)\s+(\d+)", f)   
loop % f2 out := ""
    out .= A_Index = 1 ? f1 " " f1 : ", " f1  
msgbox % out

66 (изменено: Malcev, 2014-10-19 01:27:34)

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

Можно так:


FileRead, file, C:\(Group1\wt$index.html
loop
{
   if regexmatch(file, "(\S+)\s+(\d+)", found)
   {
      output =
      loop %found2%
      {
         if A_Index = 1
            output := found1 " " found1
         else
            output .= "-" found1
      }  
      file := RegExReplace(file, found1 " " found2, output, ,1) 
   }
   else
      break
}
msgbox % file

67

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

Возможно в шаблоне также не помешает "\b". Ну и StartingPosition в regex для скорости.


file=это не надо, некоеслово 5, это не надо 3e, это надо 3.
while p:=regexmatch(file, "(\S+)\s+(\d+)\b", f, !p?1:p) {  
    loop % f2 out := ""
        out .= A_Index = 1 ? f1 " " f1 : "-" f1
    file := RegExReplace(file, f1 "\s+" f2 "(\b)", out, p, 1)  
}  
msgbox % file
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.02 (Unicode 32-bit).

68

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

Спасибо за скрипты, но эх: думал потом сам под практический пример подведу — ан нет)) Крутые они какие-то)) Вместо "некоеслово 5" на практике должно было быть

<a href="069.html">2</a>(3)

с заменой на

<a href="069.html">2</a>, <a href="069.html">2</a>, <a href="069.html">2</a>, <a href="069.html">2</a>

где количество задаётся цифрами в скобках, а содержимое тега <a...</a> можно не брать в расчёт.

69 (изменено: Malcev, 2014-10-19 13:59:23)

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

А что именно непонятно?
Лично мне тернарные операторы тоже читать неудобно.
У меня так получается:

file = <a href="069.html">2</a>(3)
pos = 1
output := ""
while pos := regexmatch(file, "(<a href=.*?</a>)\((\d+)\)", found, pos+StrLen(output))
{
   output := ""
   loop %found2%
   {
      if A_Index = 1
         output := found1 ", " found1
      else
         output .= ", " found1
   }  
   file := RegExReplace(file, found1 "\(" found2 "\)", output, ,1)
}
msgbox % file

70

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

Спасибо!

Malcev пишет:

А что именно непонятно?

Не удавалось подставить теги и настроить на замену.

71

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

Регулярно выражаясь, как задать в исключаемом перечне (в этом: [^символы]) совпадение не по одному, а  целиком по двум, трём символам (тег, например)?

72

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

Наверное можно так:

(?!...) есть негативный запрос вперед, поскольку он требует, чтобы указанный шаблон НЕ находил соответствие впереди

73 (изменено: DD, 2015-02-02 22:05:23)

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

Можно ли регулярным образом осуществить подобное: заключать в тег NOBR любой сплошной набор символов, включающих один или более &nbsp;, например (оформленное красным):

любой-текст (с&nbsp;указанием любой-текст
любой-текст и&nbsp;к&nbsp;которым любой-текст
любой-текст (<i><b>также</b></i>). любой-текст

(из чего следует:

любой-текст <nobr>(с&nbsp;указанием</nobr> любой-текст
любой-текст <nobr>и&nbsp;к&nbsp;которым</nobr> любой-текст
любой-текст <nobr>(<i><b>также</b></i>).</nobr> любой-текст
)

при этом игнорируя содержимое угловых скобок, например:

<p class="p1">В&nbsp;Путеводителе любой-текст

(из чего следует:

<p class="p1"><nobr>В&nbsp;Путеводителе</nobr> любой-текст

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

74

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

Сочинил такой код, которым две строки обрабатываются полностью как надо, но не разберусь, как обработать наличие одного или более &nbsp; во второй строке, чтобы их можно было обойти как в коде, заменив на обычные пробелы? —

string =
(
1. любой-текст (с&nbsp;указанием любой-текст
2. любой-текст и&nbsp;к&nbsp;которым любой-текст
3. любой-текст (<i><b>также</b></i>). любой-текст
4. <p class="p1">В&nbsp;Путеводителе любой-текст
)
    
MsgBox, % RegExReplace(string, "([^\s|>]*)&nbsp;([^\s|<]*)", "<nobr>$1 $2</nobr>") 

Иначе говоря, возможен ли результат, в котором даже при наличии в беспробельной группе символов нескольких &nbsp;, эти &nbsp; можно было бы не включать в сохраняемые переменные ($1, $2 и т.д.)?

75

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

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


строка
строка
строка
строка
символ
символ
символ
символ
скрипт
скрипт
скрипт
кодинг
кодинг
кодинг
кодинг

изменяя так —


_строка
строка
строка
строка
_символ
символ
символ
символ
_скрипт
скрипт
скрипт
_кодинг
кодинг
кодинг
кодинг