51

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

В этом сообщении я давал пример:

MsgBox, % RegExReplace(var, "blabla=""(\d+)""", "$1")

Я назвал зелёные кавычки внешними, а чёрные - внутренними.

52

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

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

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

53

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

То есть всё-таки имеет место экранирование? Но не внутриREGEX'овское, а вообще в любых выражениях?

54

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Ну я об этом и говорю, экранирование самое обычное, как в любых других строках.

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

55

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Всё, дошло. Вот и пример из русской справки:

;Чтобы включить буквальные кавычки в буквальную строку,
;задайте две кавычки подряд, как показано в следующем примере:
MsgBox, % "Она сказала, ""Одно яблоко в день.""" 

Спасибо!

56

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Как сделать одним шаблоном?
Удалить все z и x, оставить только первые совпадения a, b или c.
text = zaabbxbbcaaccdd  ; abcdd
text = bbbbaaddaa  ; badd

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

57 (изменено: teadrinker, 2017-11-08 21:53:46)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Вряд ли получится. Я знаю только такой способ:

text := "zaabbxbbcaaccdd"  ; abcdd

MsgBox, % RegExReplace(text, "([abc])\K\1+|[zx]")

Сам бьюсь над задачей, как удалить определённые символы (идущие необязательно подряд), находящиеся на любом расстоянии справа после указанного символа.

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

58 (изменено: belyankin12, 2017-11-08 22:25:06)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Все ненужные символы можно удалить через stringreplace. А вот повторяющиеся уже не скажу. Разве что высчитать с помощью match количество совпадений и удалить в цикле через stringreplace ненужные буквы.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

59

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

belyankin12 пишет:

Все ненужные символы можно удалить через stringreplace.

Нет, невнимательно прочитали:

teadrinker пишет:

как удалить определённые символы (идущие необязательно подряд), находящиеся на любом расстоянии справа после указанного символа.

StringReplace с такой задачей никак не справится.

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

60 (изменено: belyankin12, 2017-11-08 22:41:27)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Как до дела дошло то даже по другому сделал все.

text := "zaabbxbbcaaccdd"  ; abcdd

StringReplace, text, text, z, , all
StringReplace, text, text, x, , all
StringReplace, text, text, a, 1
StringReplace, text, text, b, 2
StringReplace, text, text, c, 3
StringReplace, text, text, a,, UseErrorLevel
StringReplace, text, text, b,, UseErrorLevel
StringReplace, text, text, c,, UseErrorLevel
StringReplace, text, text, 1, a
StringReplace, text, text, 2, b
StringReplace, text, text, 3, c

msgbox, % text

Такой метод сработает, если заранее будем знать какие буквы необходимо сохранить а какие удалить. Можно функцию какую-нибудь написать.

UPD: насчёт 59 поста, т.е. после определенного символа нужно все отрезать? RegExReplace или даже можно Match прикрутить. Или после n-го символа все отрезать?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

61

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Вопрос был, как сделать это одним шаблоном. Понятно, что serzh82saratov догадался бы, как добиться результата в несколько приёмов.

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

62

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

А, тю, я проявил невнимательность, прошу простить.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

63

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

belyankin12 пишет:

UPD: насчёт 59 поста, т.е. после определенного символа нужно все отрезать? RegExReplace или даже можно Match прикрутить. Или после n-го символа все отрезать?

str := "cccbbdddaeeebbfffbbgbbbb" ; —> cccbbdddaeeefffg

Нужно удалить все b, идущие после a за один проход.

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

64

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Зачем делать что-то одним шаблоном? Код станет проще? Код станет понятнее? Эффективнее?

teadrinker пишет:

как удалить определённые символы (идущие необязательно подряд), находящиеся на любом расстоянии справа после указанного символа.

text := "zaabb,xbbcazaczcxdd"
указанныйСимвол := ","
определённыеСимволы := "[zx]"
MsgBox % f(text, указанныйСимвол, определённыеСимволы)

f(text, symbol, removeSymbols) {
	RegExMatch(text, "(?<=,).*(?=\R|$)", text2)
	Return RegExReplace(text, text2, RegExReplace(text2, "[zx]"))
}

65

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

Сам бьюсь над задачей, как удалить определённые символы (идущие необязательно подряд), находящиеся на любом расстоянии справа после указанного символа.

Первым действием найти позицию указанного символа. Вторым действием удалить ненужные символы с помощью RegExReplace, начиная со следующей позиции. Если нужно в одно действие - тогда не знаю.

66

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

stealzy пишет:

Зачем делать что-то одним шаблоном? Код станет проще? Код станет понятнее? Эффективнее?

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

text := "zaabb,xbbcazaczcxdd"

MsgBox, % RegExReplace(text, "[zx](?!.*,)")

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

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

67

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

text := "zaabb,xbbcazaczcxdd"
MsgBox, % RegExReplace(text, "\G(\A[^,]*(z|x))?+[^zx]*\K(z|x)")

68

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Вроде работает. Посмотрю, можно ли прикрутить это к моей прежней задаче.

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

69

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Хз, чем такой однострочник лучше. Мой код гораздо понятнее и легче менять. И тоже ничего не делает, если нет запятой .

70

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

stealzy пишет:

Мой код гораздо понятнее и легче менять

А через Loop, parse ещё понятнее и легче менять.

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

71

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Только хотел сказать, что я тоже могу придумать код без этого RegEx.

72

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:

А через Loop, parse ещё понятнее и легче менять.

Только для незнакомого с RegEx человека, потому что шаблон очень прост и гораздо гибче, чем кодирование без использования RegEx.
А вот когда вы глянете через год на шаблон типа "\G(\A[^,]*(z|x))?+[^zx]*\K(z|x)", может потребоваться больше времени на его осмысление, чем на написание нового кода типа моего.

73 (изменено: svoboden, 2017-11-09 03:06:43)

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Я считаю, что далеко не все делается через RegEx, т.к. RegEx не способствует пониманию самого ahk, чем, например, более простые команды. Хоть и понимаю RegEx.

74

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

teadrinker пишет:
stealzy пишет:

Зачем делать что-то одним шаблоном? Код станет проще? Код станет понятнее? Эффективнее?

Затем, что задача такая. На развитие понимания RegEx.

Вот это воды натекло, на ровном месте.

svoboden пишет:

RegEx не способствует пониманию самого ahk

Тут как бы и тема именно про понимание RegEx.

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

75

Re: AHK: Вопросы по RegExp [, RegEx, RegExMatch, RegExReplace]

Malcev пишет:
text := "zaabb,xbbcazaczcxdd"
MsgBox, % RegExReplace(text, "\G(\A[^,]*(z|x))?+[^zx]*\K(z|x)")

Можно упростить, вроде:

text := "zaabb,xbbcazaczcxdd"
MsgBox, % RegExReplace(text, "\G(\A[^,]*)?+[^zx]*\K[zx]")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg