26

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

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

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

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

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

31

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

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

32

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

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

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

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

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

36

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

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

37

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

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

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

38

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

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

39

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

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

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

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

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

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

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

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

ӒӒӒӒӒӒӒ

Пробовал так

[&#\d+;]*

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

41

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

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

Windows 10 x64

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

43

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

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

Windows 10 x64

44

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

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

стр \d+<

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

45

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

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

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

46

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

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

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

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
Skype dmitry_fiveg

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
Skype dmitry_fiveg