1 (изменено: DD, 2013-03-15 21:47:30)

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

Имеется ли средство преодолеть жадность квантификатора:


Src =
(
<font style="font-size:x-small;font-style:italic;"> текст1 </font><font style="font-style:italic;font-size:x-small;"> текст2 <br/>
)

Src := RegExReplace(Src, "(<font style=""*font-size:x-small.*?"">.*?)<br/>.*?</font>", "") 

msgbox % Src

То бишь, найти:

<font style="font-style:italic;font-size:x-small;"> текст2 <br/>

2 (изменено: serzh82saratov, 2013-03-15 22:18:21)

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

msgbox % RegExReplace(Src, ".*<font style="".*font-size:x-small.*?"">(.*?)?<br/>.*", "$1")

Поспешил. Это найдёт только "текст2".

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

3

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

Src =
(
<font style="font-size:x-small;font-style:italic;"> текст1 </font><font style="font-style:italic;font-size:x-small;"> текст2 <br/>
)

msgbox % RegExReplace(Src, "<font style=""*font-size:x-small.*?</font>", "")

; <font style="font-style:italic;font-size:x-small;"> текст2 <br/>
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

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

teadrinker
А если:

Src =
(
<font style="font-size:x-small;font-style:italic;"> текст1 </font><font style="font-style:italic;font-size:x-small;"> текст2 <br/><font style="font-style:italic;font-size:x-small;"> текст3 <br/>
)

Я так понимаю ТС требуется первое совпадение справа.?

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

5

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

Это уж он должен уточнить. Как и на что конкретно ориентироваться, ища совпадение.

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

6

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


Src =
(
<font style="font-size:x-small;font-style:italic;"> текст1 </font><font style="font-style:italic;font-size:x-small;"> текст2 <br/>
)
RegExMatch(src, ">\K<f.*$", m)
MsgBox % m

7 (изменено: serzh82saratov, 2013-03-15 22:45:59)

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

Можно так ещё попробовать:


Src =
(
<font style="font-size:x-small;font-style:italic;"> текст1 </font><font style="font-style:italic;font-size:x-small;"> текст2 <br/><font style="font-style:italic;font-size:small;"> Здесь size не x-small! <br/>
)
msgbox % RegExReplace(Src, ".*(<font style="".*font-size:x-small.*?"">(.*?)?<br/>).*", "$1")

Предыдущий вариант поправлен, если надо только "текст2".

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

8

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

Спасибо!

9

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

Господа, а каким будет выражение для поиска в пределах кавычек?


Src =
(
<font style=" Любой-Текст-В-Пределах-Этих-Кавычек font-size:x-small; Любой-Текст-В-Пределах-Этих-Кавычек "> Любой-Текст <br/>
)

msgbox % RegExReplace(Src, "(<font style=""*font-size:x-small.*?"">.*?)<br/>.*?</font>", "")

Почему-то предыдущие примеры в приложениях не срабатывают (PowerGREP, AdvF&R, Notepad++).

10 (изменено: serzh82saratov, 2013-03-16 00:13:01)

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


msgbox % RegExReplace(Src, ".*(<font style=""(.*?)?"">.*?<br/>).*", "$2")
или
msgbox % RegExReplace(Src, ".*<font style=""(.*?)?"">.*", "$1")

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

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

11 (изменено: DD, 2013-03-16 00:24:26)

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

serzh82saratov пишет:

желаемый результат

<font style=" Любой-Текст-В-Пределах-Этих-Кавычек font-size:x-small; Любой-Текст-В-Пределах-Этих-Кавычек "> Любой-Текст <br/>

12

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

msgbox % RegExReplace(Src, ".*(<font style=""(.*?)?"">.*?<br/>).*", "$1")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13 (изменено: serzh82saratov, 2013-03-16 00:32:24)

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

Господа, а каким будет выражение для поиска в пределах кавычек?

желаемый результат

<font style=" Любой-Текст-В-Пределах-Этих-Кавычек font-size:x-small; Любой-Текст-В-Пределах-Этих-Кавычек "> Любой-Текст <br/>

Вот так в пределах кавычек...

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

14

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

Увы, но как универсальный шаблон не идёт — видимо, из-за обрамлений
.*( ... ).*

15

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

За информацию спасибо, но это выражение во множестве текста действительно не сработает, нужно условие.

16

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

Ничего не понимаю, вы можете просто привести пример???

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

17 (изменено: DD, 2013-03-16 04:00:27)

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

Кажись, отбой.

Но через AHK не работает:

(<font style=""[^""]*font-size:x-small[^""]*"">[^<]*)<br/>

В Notepad++ работает:

(<font style="[^"]*font-size:x-small[^"]*">[^<]*)<br/>

А ведь выражение правильное.

18

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

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


А_строка1
А_строка2
А_строка3
Б_строка4
Б_строка5
Б_строка6
Б_строка7
В_строка8
В_строка9
Г_строка10
Г_строка11
Г_строка12
Г_строка13
Д_строка14
Д_строка15
Д_строка16
Д_строка17
Д_строка18
Д_строка19
Е_строка20

получить такое изменение? —


_А_строка1
А_строка2
А_строка3
_Б_строка4
Б_строка5
Б_строка6
Б_строка7
_В_строка8
В_строка9
_Г_строка10
Г_строка11
Г_строка12
Г_строка13
_Д_строка14
Д_строка15
Д_строка16
Д_строка17
Д_строка18
Д_строка19
_Е_строка20

19 (изменено: Malcev, 2014-07-02 05:19:10)

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

Я бы так сделал:

text =
(
А_строка1
А_строка2
А_строка3
Б_строка4
Б_строка5
Б_строка6
Б_строка7
В_строка8
В_строка9
Г_строка10
Г_строка11
Г_строка12
Г_строка13
Д_строка14
Д_строка15
Д_строка16
Д_строка17
Д_строка18
Д_строка19
Е_строка20
)

array := {А:"_А",Б:"_Б"}
For key, value in array
   StringReplace, text, text, %key%, %value%
msgbox % text

20 (изменено: serzh82saratov, 2014-07-02 10:04:07)

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

Exist := {} 
Loop, parse, text, `n 
    Pref := SubStr(A_LoopField, 1, InStr(A_LoopField, "_")-1)
    , Exist[Pref] ? Res .= A_LoopField "`n" : Res .= "_" A_LoopField "`n", Exist[Pref] := 1
MsgBox % Res

Или так проще.


Exist := {}
Loop, parse, text, `n 
    Pref := SubStr(A_LoopField, 1, InStr(A_LoopField, "_") - 1)
    , Res .= (Exist[Pref] ? "" : "_") A_LoopField "`n"
    , Exist[Pref] := 1
MsgBox % Res

Malcev
Нужно ведь ещё массив таких префиксов где то взять. И метод всё равно неверный, если в строке будет символ префикса, то несработает.

text =
(
А_строкБ1
А_строка2
А_строка3
Б_строка4
Б_строка5

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

21

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

Нужно ведь ещё массив таких префиксов где то взять

Зачем?

И метод всё равно неверный, если в строке будет символ префикса, то несработает.

Тоже не понял.

Можно ли посредством регулярных выражений произвести изменения только с первыми соответствиями строк?

Поставленная задача в моем понимании выполняется.
О привязке к началу строки в ней нету ни слова.

22

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

Malcev пишет:

И метод всё равно неверный, если в строке будет символ префикса, то несработает.

Тоже не понял.

Более наглядно:

text =
(
А_БВГД1
А_строка2
А_строка3
Б_строка4
Б_строка5
Б_строка6
Б_строка7
В_строка8
В_строка9
Г_строка10
Г_строка11
Г_строка12
Г_строка13
Д_строка14
Д_строка15
Д_строка16
Д_строка17
Д_строка18
Д_строка19
Е_строка20
)

array := {А:"_А",Б:"_Б",В:"_В",Г:"_Г",Д:"_Д"}
For key, value in array
   StringReplace, text, text, %key%, %value%
msgbox % text

23

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

Значит я не так понял задачу.
Если по-вашему, тогда можно так:

array := {А:"",Б:"",В:"",Г:"",Д:""}
text := "`n" text
For key, value in array
   StringReplace, text, text, `n%key%, `n_%key%
StringTrimLeft, text, text, 1
msgbox % text

24

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

Тогда уж так:

text := "`n" text
For key, value in ["А", "Б", "В", "Г", "Д"]
   StringReplace, text, text, `n%value%, `n_%value% 
msgbox % Trim(text, "`n")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

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

Спасибо! Надо же, как можно по-всякому!

26

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

можно по-всякому

Ну если самому заранее прописывать имена префиксов, то ещё и не так можно...

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

27

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

text := "`n" text
For key, value in ["А", "Б", "В", "Г", "Д"]
   StringReplace, text, text, `n%value%, `n_%value% 
msgbox % Trim(text, "`n")

С тримом не согласен, так как в переменной могут быть специально оставлены переносы строки.

28

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

в переменной могут быть специально оставлены переносы строки.

Это уже совсем не важно, и неизвестно. Но если настаиваешь, то как же Мы можем представить себе лишние переносы строк которых нет в задании, если даже нельзя допустить того, что имена префиксов могут быть другими.

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

29 (изменено: Malcev, 2014-07-02 17:56:19)

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

Это уже совсем не важно, и неизвестно

Как-раз таки важно, потому что неизвестно.
А внимания на префикс я изначально не заострял, так как топикстартер о нем и не упоминал.

30

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

Как-раз таки важно, потому что неизвестно.

Ну если важно то что неизвестно, а то что очевидно не важно, то можно из чего угодно, сделать любые выводы.
И вообще откуда внезапно становится очевидным, что начала строк это известные заранее буквы, если это неизвестно, потому что не написано в задании? Ведь если неизвестно, то по твоему надо учитывать все возможные варианты.
Как например если в ТЗ

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

не было бы ещё пары слов

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

то можно всем доказывать, что и этот код правильный:


text =
(
А_строка1
А_строка2
А_строка3
Б_строка4
Б_строка5
Б_строка6
Б_строка7
В_строка8
В_строка9
Г_строка10
Г_строка11
Г_строка12
Г_строка13
Д_строка14
Д_строка15
Д_строка16
Д_строка17
Д_строка18
Д_строка19
Е_строка20
)

Loop, parse, text, `n 
    Res .= (InStr("|1|4|8|10|14|20|", "|" A_Index "|") ? "_" : "") A_LoopField "`n" 
MsgBox % Res
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

31

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

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

32

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

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

Уж точно не про употреблённую мною Trim.

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

33

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

Вот исходный код который нужно подкорректировать.

str = Ставка:
log1 =
(
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 7000
[00:38:42] - делов то {FFFFFF}(Jon_Kros)
[00:38:42] {F7C306}[Casino Master] {009ACD}Амиго, да ты крут! Чистая прибыль: {2CC931}5000
[00:38:44] SF | Куплю дом в г.Лос-Сантос. Цена: Договорная | Отправил Evgenij_Patorson[110] (тел. 757474)
[00:38:44]   Объявление проверил сотрудник СМИ Jon_Abrams
[00:38:45] - булка всем нужна {FFFFFF}(Jon_Kros)
[00:38:49] - у кого то есть 100к? {FF6600}(Fo_Moreno)
[00:38:51] - -__ {FF6600}(Fo_Moreno)
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 2000
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Fer34rari и John_34Hasber бросили кости. Ставка: 7000
)
Loop, parse, log1, `n
{
 If A_LoopField contains %str%
 {
 RegExMatch(A_LoopField, "Ставка:(.*\d+)", Match)
 StringReplace, SummaStavki, Match1, `n,, All
 }
}
msgbox % SummaStavki
Exitapp

Вроде бы все правильно показывает, но если находит 2 "Ставка" копируется не точное число.
Суть, нужно что бы копировал самую нижнюю строку где есть слово "Ставка:". А из этой строки извлечь сумму ставки, а именно число, в моем случае 7000

34

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

log1 =
(
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 7000
[00:38:42] - делов то {FFFFFF}(Jon_Kros)
[00:38:42] {F7C306}[Casino Master] {009ACD}Амиго, да ты крут! Чистая прибыль: {2CC931}5000
[00:38:44] SF | Куплю дом в г.Лос-Сантос. Цена: Договорная | Отправил Evgenij_Patorson[110] (тел. 757474)
[00:38:44]   Объявление проверил сотрудник СМИ Jon_Abrams
[00:38:45] - булка всем нужна {FFFFFF}(Jon_Kros)
[00:38:49] - у кого то есть 100к? {FF6600}(Fo_Moreno)
[00:38:51] - -__ {FF6600}(Fo_Moreno)
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 2000
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Fer34rari и John_34Hasber бросили кости. Ставка: 7000
)
Pos = 1
While Pos := regexmatch(log1, "Ставка: (\d+)", match, pos+StrLen(match))
   stavka := match1
msgbox % stavka

35

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


log1 =
(
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 1000
[00:38:42] - делов то {FFFFFF}(Jon_Kros)
[00:38:42] {F7C306}[Casino Master] {009ACD}Амиго, да ты крут! Чистая прибыль: {2CC931}5000
[00:38:44] SF | Куплю дом в г.Лос-Сантос. Цена: Договорная | Отправил Evgenij_Patorson[110] (тел. 757474)
[00:38:44]   Объявление проверил сотрудник СМИ Jon_Abrams
[00:38:45] - булка всем нужна {FFFFFF}(Jon_Kros)
[00:38:49] - у кого то есть 100к? {FF6600}(Fo_Moreno)
[00:38:51] - -__ {FF6600}(Fo_Moreno)
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Ставка: 2000
[00:38:53] Akeno_Ferrari и John_Hasber бросили кости. Результат {FFCD00}2:5
[00:38:53] Akeno_Fer34rari и John_34Hasber бросили кости. Ставка: 7000
) 

RegExMatch(log1, ".*Ставка:\s*(\d+)", Match)  
msgbox % Match1
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

36

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

А почему он с .* перед Ставка берет последнее совпадение?

37

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

Потому что шаблон точка-звездочка .* это ВсеЧтоУгодно, если верить русской справке.

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

38

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

Не понимаю алгоритм. Почему с точкой-звездочка он ищет до последнего совпадения, а без них берет первый?

39

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

Жадность: (Примеч. переводчика: жадный символ из нескольких возможных отвечающих вариантов выберет самый длинный.) по умолчанию, символы *, ?, +, {min,max} являются жадными, поскольку они поглощают все символы, включая последний из тех, что еще отвечают всему шаблону.

А что именно тут не ясно?

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

40 (изменено: DD, 2014-07-04 23:29:54)

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

Приветствую!

С каким выражением можно выбрать подряд идущие символы, подобные следующим, целиком? —

&#1234;&#1234;&#1234;&#1234;&#1234;&#1234;&#1234;

Пробовал так

[&#\d+;]*

но это находит также и одиночные перечисленные символы.

41

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

Здравствуйте, такой вопрос: есть переменная которая может содержать число состоящее из 2х цифр и у него может стоять первой цифрой 0 либо второй цифрой 0, так вот надо такое выражение, если у этого числа цифра 0 спереди, то убрать этот 0, а если вторым то ничего не делать. Возможно получится даже и не регулярным выражением, а кто то по другому .

Как сказал мой дед - Я твой дед

42

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


str = ertger01230fgdf
RegExMatch(str, "0*(\d+)", Match)  
MsgBox % Match1
str = ertger0001230fgdf
RegExMatch(str, "0*(\d+)", Match)  
MsgBox % Match1
str = ertger1230fgdf
RegExMatch(str, "0*(\d+)", Match)  
MsgBox % Match1
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

43

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

То, что надо, спасибо.

Как сказал мой дед - Я твой дед

44

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

Какой шаблон будет пропускать при поиске угловую скобку перед цифрами:

стр \d+<

Т.е. находить, если нет угловой скобки перед цифрами?

45

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

Мне бы шаблончик: искать вне угловых скобок — и вместе с тем вне тегов pre, style и script. Вот что имею:

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

46

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

Конкретный пример нужен. Что искать-то?

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

47 (изменено: DD, 2014-10-11 22:35:13)

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

Есть такая программа — PowerGREP, в ней предусмотрена возможность замен в определенных секциях: между тегами и т.д. Т.е., в этом режиме указывается некая секция, как-то так:

<title>(.*?)</title>

и ниже в окнах — что на что в ней заменять.

В моём же случае нужно определить секцию: выражение, которое не будет затрагивать текст, заключенный в ломаные скобки:

<.*?>

а также то, что находится внутри тегов pre, style и script:

<style type="text/css">.*?</style>

48

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

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

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

49 (изменено: DD, 2016-08-21 15:31:34)

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

Да: всё что вне угловых скобок и вне этих тегов. Переносы есть, но при выбранной 'Dot matches newlines' их можно не брать в расчет —

http://i65.fastpic.ru/thumb/2014/1012/b2/0fde5349554a7b63003dd0658a5716b2.jpeg

50

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

Вроде всё просто:

Text =
(
Текст вне тегов <test abc>Текст внутри разрешённого тега</test>
Текст вне тегов <pre abc>Текст внутри запрещённого тега</pre> Текст вне тегов
Текст вне тегов
Текст вне тегов <style abc>Текст внутри запрещённого тега</style>
Текст вне тегов
Текст вне тегов <url abc>Текст внутри разрешённого тега</url>
Текст вне тегов <script abc>Текст внутри запрещённого тега</script>
)

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

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
Telegram jollycoder

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
Telegram jollycoder

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 Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui
+ DD

62

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

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

63

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

DD пишет:

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

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

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

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 Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

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: Регулярные выражения

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


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

изменяя так —


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

76 (изменено: Malcev, 2015-05-23 16:16:37)

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

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

src =
(
строка
строка
строка
строка
символ
символ
символ
символ
скрипт
скрипт
скрипт
кодинг
кодинг
кодинг
кодинг
)

Pos := 1
While Pos := RegExMatch(src, "s)(.+?)(?:\R|$)",match,Pos+StrLen(match))
{
   if ("" match1 == matchPrev)    ; пустоту присваиваем для того, чтобы числа сравнивались как текст. 
      new .= match1 "`n"
   else
   {
      new .= "_" match1 "`n"
      matchPrev := match1
   }
}
msgbox % new
+ DD

77

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

N := 6  ; предположим, учитываем первые шесть символов

src =
(
строка abc
строка def
символ cvb
символ ert
скрипт sdft
скрипт cghj
скрипт werty
кодинг cghjk
кодинг qwert
кодинг qwervf
строка leaskgn
кодинг cgdtyu
кодинг qwervf
)

MsgBox, % RegExReplace(src, "(?P<n>.{" N "}).*?(\R|$)(\1.*?(\R|$))*", "_$0")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

78

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

Ошибка:

N := 6  ; предположим, учитываем первые шесть символов

src =
(
3.0
31
символ cvb
символ ert
скрипт sdft
скрипт cghj
скрипт werty
кодинг cghjk
кодинг qwert
кодинг qwervf
строка leaskgn
кодинг cgdtyu
кодинг qwervf
)

MsgBox, % RegExReplace(src, "(?P<n>.{" N "}).*?(\R|$)(\1.*?(\R|$))*", "_$0")

Мой вариант - изначально не так понял задание.

N := 6  ; предположим, учитываем первые шесть символов

src =
(
3.0
31
символ cvb
символ ert
скрипт sdft
скрипт cghj
скрипт werty
кодинг cghjk
кодинг qwert
кодинг qwervf
строка leaskgn
кодинг cgdtyu
кодинг qwervf
)

Pos := 1
While Pos := RegExMatch(src, "s)(.+?)(?:\R|$)",match,Pos+StrLen(match))
{
   if ("" SubStr(match1, 1, N)  == SubStr(matchPrev, 1, N))    ; пустоту присваиваем для того, чтобы числа сравнивались как текст. 
      new .= match1 "`n"
   else
   {
      new .= "_" match1 "`n"
      matchPrev := match1
   }
}
msgbox % new

79

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

Не понял. Если написано, что «N := 6  ; предположим, учитываем первые шесть символов», значит предполагается, что по крайней мере шесть символов в строке есть.

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

80

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

Строки-то разные бывают, поэтому лучше будет подстраховаться.

81

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

Если количество символов в строке может быть меньше N:

N := 6  ; предположим, учитываем первые шесть символов

src =
(
3.0
31
символ cvb
символ ert
сим kjh
скрипт sdft
скрипт cghj
скрипт werty
кодинг cghjk
кодинг qwert
кодинг qwervf
строка leaskgn
кодинг cgdtyu
кодинг qwervf
)

MsgBox, % RegExReplace(src, "(?P<n>[^\r\n]{1," N "}).*?(\R|$)(\1.*?(\R|$))*", "_$0")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

82

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

Спасибо!

83 (изменено: DD, 2015-06-01 14:29:22)

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

<p>В&nbsp;большинстве случаев женщины имеют некий нормальный и&nbsp;практичный женский ум. По&nbsp;моим наблюдениям, он&nbsp;в&nbsp;целом ряде параметров превосходит мужской, и&nbsp;причем весьма значительно. Когда мы&nbsp;организовывали с&nbsp;моей 'герлой' <nobr>какие-то</nobr> мероприятия, то&nbsp;я&nbsp;частенько замечал, что решения, ею предлагаемые, неожиданно оказываются куда лучше моих. Эффективнее, что&nbsp;ли... Это был кардинально иной подход, и&nbsp;проблема разрешалась проще, быстрее и, я&nbsp;бы даже сказал, красивее. Впоследствии, когда количество этих <nobr>неожиданно-оригинальных</nobr> и&nbsp;<nobr>изящно-простых</nobr> женских решений превзошли все мыслимые пределы, я&nbsp;не&nbsp;выдержал, и&nbsp;спросил: почему? Почему женские мозги в&nbsp;этих простых, чуть&nbsp;ли не&nbsp;бытовых вещах настолько превосходят мужские? И&nbsp;знаете, что мне ответили? 'Это потому, что мы, женщины,&nbsp;&#151; стервы. Все. Просто у&nbsp;одних это в&nbsp;явной форме, а&nbsp;у&nbsp;других в&nbsp;скрытой. Это не&nbsp;ум, а&nbsp;скорее, изворотливость. А&nbsp;вы, мужчины, можете быть просто умными. Ваш ум&nbsp;&#151; как&nbsp;бы это сказать?&nbsp;&#151; имеет благородный характер, что&nbsp;ли...' В&nbsp;общем, сообщаю вам о&nbsp;существовании мнения, что необыкновенная изворотливость женских мозгов следует из&nbsp;женской&nbsp;же стервозности. Тем не&nbsp;менее, мне кажется, что весьма неумно поступают те мужчины, которые стремятся <nobr>всё-всё-всё</nobr> делать по&nbsp;своему, не&nbsp;советуясь со&nbsp;своими подругами.</p>
<p>Но&nbsp;здесь речь идёт о&nbsp;настоящем, остром и&nbsp;сильном уме (связанным с&nbsp;врождённой интуицией), который зачастую даже в&nbsp;хорошем образовании не&nbsp;нуждается. Для пищи ему бывает достаточно <nobr>двух-трёх</nobr> книжечек, да <nobr>каких-нибудь</nobr> эпизодических общественных лекций... Характерная особенность женщин такого рода&nbsp;&#151; они никогда не&nbsp;занимаются никаким видом творческой деятельности&nbsp;&#151; не&nbsp;пишут умных книжек, например (из&nbsp;этого, кстати, следует, что те, кто пишет, таким умом не&nbsp;обладают заведомо). Возможно, происходит это потому, что такая женщина, в&nbsp;силу недюжинного ума прекрасно сознаёт, что всё равно пороху не&nbsp;выдумает&nbsp;&#151; в&nbsp;её творческом рвении неизбежно скажется чисто биологическая (то&nbsp;есть женская) особенность превращать муху в&nbsp;слона&nbsp;&#151; зацикливаться на&nbsp;мелкой проблемке и&nbsp;терять из&nbsp;виду всю перспективу.</p>

Есть ли возможность регулярным образом в приведенном отрывке все наборы символов без пробелов, в которые включаются &nbsp;|<nobr>|</nobr>|&#151; — заключать в тег <S></S>? Например —

<S>то&nbsp;я&nbsp;частенько</S>
<S><nobr>всё-всё-всё</nobr></S>
<S>и&nbsp;<nobr>изящно-простых</nobr></S>
<S>(из&nbsp;этого,</S>
и т.д.?

Или если это затруднительно, каким будет шаблон-условие для: любые символы без пробелов, в которых есть &nbsp;|<nobr>|</nobr>|&#151;?

Также интересует шаблон, с которым можно было бы разом (с одного цикла) удалить все &nbsp;, включенные в тег <NOBR></NOBR>.

84

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

DD пишет:

все наборы символов без пробелов, в которые включаются &nbsp

Т. е. в данном случае начало текста

<p>В&nbsp;большинстве

нужно заменить на

<S><p>В&nbsp;большинстве</S>

? Туда и открывающие теги могут попадать?

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

85 (изменено: DD, 2015-06-01 23:50:23)

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

В идеале желалось бы, чтобы из тегов в пределы <S></S> попадали только <NOBR>-теги, а продолжение <p>В&nbsp;большинстве обрабатывалось бы без захвата тега <p>, поскольку после него присутствует &nbsp;. Но если и другие туда войдут — тоже ничё))

86

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

Так?

html =
(
<p>В&nbsp;большинстве случаев женщины имеют некий нормальный и&nbsp;практичный женский ум. По&nbsp;моим наблюдениям, он&nbsp;в&nbsp;целом ряде параметров превосходит мужской, и&nbsp;причем весьма значительно. Когда мы&nbsp;организовывали с&nbsp;моей 'герлой' <nobr>какие-то</nobr> мероприятия, то&nbsp;я&nbsp;частенько замечал, что решения, ею предлагаемые, неожиданно оказываются куда лучше моих. Эффективнее, что&nbsp;ли... Это был кардинально иной подход, и&nbsp;проблема разрешалась проще, быстрее и, я&nbsp;бы даже сказал, красивее. Впоследствии, когда количество этих <nobr>неожиданно-оригинальных</nobr> и&nbsp;<nobr>изящно-простых</nobr> женских решений превзошли все мыслимые пределы, я&nbsp;не&nbsp;выдержал, и&nbsp;спросил: почему? Почему женские мозги в&nbsp;этих простых, чуть&nbsp;ли не&nbsp;бытовых вещах настолько превосходят мужские? И&nbsp;знаете, что мне ответили? 'Это потому, что мы, женщины,&nbsp;&#151; стервы. Все. Просто у&nbsp;одних это в&nbsp;явной форме, а&nbsp;у&nbsp;других в&nbsp;скрытой. Это не&nbsp;ум, а&nbsp;скорее, изворотливость. А&nbsp;вы, мужчины, можете быть просто умными. Ваш ум&nbsp;&#151; как&nbsp;бы это сказать?&nbsp;&#151; имеет благородный характер, что&nbsp;ли...' В&nbsp;общем, сообщаю вам о&nbsp;существовании мнения, что необыкновенная изворотливость женских мозгов следует из&nbsp;женской&nbsp;же стервозности. Тем не&nbsp;менее, мне кажется, что весьма неумно поступают те мужчины, которые стремятся <nobr>всё-всё-всё</nobr> делать по&nbsp;своему, не&nbsp;советуясь со&nbsp;своими подругами.</p>
<p>Но&nbsp;здесь речь идёт о&nbsp;настоящем, остром и&nbsp;сильном уме (связанным с&nbsp;врождённой интуицией), который зачастую даже в&nbsp;хорошем образовании не&nbsp;нуждается. Для пищи ему бывает достаточно <nobr>двух-трёх</nobr> книжечек, да <nobr>каких-нибудь</nobr> эпизодических общественных лекций... Характерная особенность женщин такого рода&nbsp;&#151; они никогда не&nbsp;занимаются никаким видом творческой деятельности&nbsp;&#151; не&nbsp;пишут умных книжек, например (из&nbsp;этого, кстати, следует, что те, кто пишет, таким умом не&nbsp;обладают заведомо). Возможно, происходит это потому, что такая женщина, в&nbsp;силу недюжинного ума прекрасно сознаёт, что всё равно пороху не&nbsp;выдумает&nbsp;&#151; в&nbsp;её творческом рвении неизбежно скажется чисто биологическая (то&nbsp;есть женская) особенность превращать муху в&nbsp;слона&nbsp;&#151; зацикливаться на&nbsp;мелкой проблемке и&nbsp;терять из&nbsp;виду всю перспективу.</p>
)
p := "[^ \t\r\n<>]"
html := RegExReplace(html, "i)" p "*(<nobr>" p "+?</nobr>|&(nbsp|#151);" p "+)", "<S>$0</S>")

Run, notepad.exe,,, PID
WinWait, ahk_pid %PID%
ControlSetText, Edit1, % html
DD пишет:

Также интересует шаблон, с которым можно было бы разом (с одного цикла) удалить все &nbsp;, включенные в тег <NOBR></NOBR>.

txt := "&nbsp;<NOBR>txt1 &nbsp;txt2</NOBR>txt3 &nbsp;txt4<NOBR>txt5 &nbsp;txt6</NOBR>"
MsgBox, % RegExReplace(txt, "iU)(<NOBR>.*)&nbsp;(.*</NOBR>)", "$1$2")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

87

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

Так не удалит:

txt := "&nbsp;<NOBR>&nbsp;txt1 &nbsp;&nbsp;txt2&nbsp;</NOBR>txt3 &nbsp;txt4<NOBR>txt5 &nbsp;txt6</NOBR>"
MsgBox, % RegExReplace(txt, "iU)(<NOBR>.*)&nbsp;(.*</NOBR>)", "$1$2")

88

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

Только так придумал, проще не вышло:

txt := "&nbsp;<NOBR>&nbsp;txt1 &nbsp;&nbsp;txt2&nbsp;</NOBR>txt3 &nbsp;txt4<NOBR>txt5 &nbsp;txt6</NOBR>"

start := 1
while RegExMatch(txt, "iUO)(.*)(<NOBR>.*&nbsp;.*</NOBR>)", found, start)
   NewTxt .= found[1] . RegExReplace(found[2], "&nbsp;"), start := found.Pos(2) + found.Len(2)

NewTxt .= SubStr(txt, start)
MsgBox, % NewTxt
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

89

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

Вот спасибо!

90

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

Прошу подсказать, почему многочисленные примеры к этому вопросу не обрабатывают такой текст из переменной:


text =
(
ЮРЬЕВ<P><A HREF="Group039\33248.html">ЮРЬЕВ</A></P>
ЮСТИЦИЯ<P><A HREF="Group039\33249.html">ЮСТИЦИЯ</A></P>
ЮТИТЬСЯ<P><A HREF="Group039\33250.html">ЮТИТЬСЯ</A></P>
ЮФТЬ<P><A HREF="Group039\33251.html">ЮФТЬ</A></P>
ЯБЕДА<P><A HREF="Group039\33252.html">ЯБЕДА</A></P>
ЯБЕДНИК<P><A HREF="Group039\33253.html">ЯБЕДНИК</A></P>
ЯБЕДНИЧАТЬ<P><A HREF="Group039\33254.html">ЯБЕДНИЧАТЬ</A></P>
ЯБЛОКО<P><A HREF="Group039\33255.html">ЯБЛОКО</A></P>
ЯБЛОНЯ<P><A HREF="Group039\33256.html">ЯБЛОНЯ</A></P>
ЯБЛОЧКО<P><A HREF="Group039\33257.html">ЯБЛОЧКО</A></P>
)

Exist := {} 
Loop, parse, text, `n 
    Pref := SubStr(A_LoopField, 1, InStr(A_LoopField, "_")-1)
    , Exist[Pref] ? Res .= A_LoopField "`n" : Res .= "_" A_LoopField "`n", Exist[Pref] := 1

msgbox % Res

а такой обрабатывают:


text =
(
А_строка1
А_строка2
А_строка3
Б_строка4
Б_строка5
Б_строка6
Б_строка7
В_строка8
В_строка9
Г_строка10
Г_строка11
Г_строка12
Г_строка13
Д_строка14
)

Exist := {} 
Loop, parse, text, `n 
    Pref := SubStr(A_LoopField, 1, InStr(A_LoopField, "_")-1)
    , Exist[Pref] ? Res .= A_LoopField "`n" : Res .= "_" A_LoopField "`n", Exist[Pref] := 1

msgbox % Res

91

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

Предполагается, что вторым символом в каждой строке должен быть «_».

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

92

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

Если учитывать N первых символов, то так для любого случая:

N := 1

text =
(
ЮРЬЕВ<P><A HREF="Group039\33248.html">ЮРЬЕВ</A></P>
ЮСТИЦИЯ<P><A HREF="Group039\33249.html">ЮСТИЦИЯ</A></P>
ЮТИТЬСЯ<P><A HREF="Group039\33250.html">ЮТИТЬСЯ</A></P>
ЮФТЬ<P><A HREF="Group039\33251.html">ЮФТЬ</A></P>
ЯБЕДА<P><A HREF="Group039\33252.html">ЯБЕДА</A></P>
ЯБЕДНИК<P><A HREF="Group039\33253.html">ЯБЕДНИК</A></P>
ЯБЕДНИЧАТЬ<P><A HREF="Group039\33254.html">ЯБЕДНИЧАТЬ</A></P>
ЯБЛОКО<P><A HREF="Group039\33255.html">ЯБЛОКО</A></P>
ЯБЛОНЯ<P><A HREF="Group039\33256.html">ЯБЛОНЯ</A></P>
ЯБЛОЧКО<P><A HREF="Group039\33257.html">ЯБЛОЧКО</A></P>
)

MsgBox, % RegExReplace(text, "(?P<n>[^\r\n]{1," N "}).*?(\R|$)(\1.*?(\R|$))*", "_$0")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

93

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

Премного благодарен!

94

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

index.html под два мегабайта через чтение файла не обрабатывает:


FileRecycle, D:\Out.txt
FileRead, text, D:\index.html

N := 1
text := RegExReplace(text, "(?P<n>[^\r\n]{1," N "}).*?(\R|$)(\1.*?(\R|$))*", "_$0")
msgbox % text
FileAppend, %text%, D:\Out.txt

Может директива какая нужна?

95

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

У меня сработало с трёхмегабайтовым за секунду.

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

96

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

teadrinker, после обновления тоже не работает, как и после изменения формата завершений строк.
Не взглянешь на моём примере? — готово к запуску по извлечении в корень диска D:\.

97

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

А чем не устраивает код из 78 поста?

98

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

Про эти посты я и забыл, но они тоже у меня через чтение не работают. Кстати, обработка не ведётся, если в N вписать один или два первых символа, а только для бОльших значений.

99 (изменено: Malcev, 2015-09-14 06:02:03)

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

У меня так с вашим примером работает:

FileRead, text, index.html.txt
N := 1, Pos := 1, match := matchPrev := new := ""
While Pos := RegExMatch(text, "s)(.+?)(?:\R|$)",match,Pos+StrLen(match))
{
   if ("" SubStr(match1, 1, N)  == SubStr(matchPrev, 1, N))    ; пустоту присваиваем для того, чтобы числа сравнивались как текст. 
      new .= match1 "`n"
   else
   {
      new .= "_" match1 "`n"
      matchPrev := match1
   }
}

FileAppend, %new%, Out.txt
sleep 1000
Run, Out.txt
+ DD

100

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

Да, мой предыдущий вариант не работает, RegExMatch выдаёт ErrorLevel.

Malcev пишет:
new .= match1 "`n"

А с чего ты решил, что там "`n" ? Там `r.

FileRead, text, D:\_TEST\index.html.txt

N := 1, pos := 1
while pos := RegExMatch(text, "(.{" N "}).*?(\R|$)", match, pos + StrLen(match))
   (prev == match1) ? NewText .= match : (prev := match1, NewText .= "_" . match)

FileDelete, D:\_TEST\Out.txt
FileAppend, %NewText%, D:\_TEST\Out.txt
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD