1

Тема: AHK: Добавить текст в переменной после нужного символа

Допустим, у меня есть строка:

str = Text1Text2EEText3Text4EEText5EEText6

1) Нужно, чтобы после каждого совпадения "ЕЕ" скрипт вставлял "0"
Чтобы получилось так:

Text1Text2EE0Text3Text4EE0Text5EE0Text6

2) Нужно, чтобы после 2го совпадения "EE" скрипт вставил "_"
Чтобы получилось так:

Text1Text2EEText3Text4EE_Text5EEText6

2 (изменено: yalanne, 2016-07-03 12:36:41)

Re: AHK: Добавить текст в переменной после нужного символа

str = Text1Text2EEText3Text4EEText5EEText6

strNew1 := RegExReplace(str,"(\d)EE(.)","$1EE0$2")
strNew2 := RegExReplace(str,"^(.+\dEE.+\d)EE(.+\dEE.+\d)+$","$1EE_$2")
strNew3 := RegExReplace(	RegExReplace(str,"(\d)EE(.)","$1EE0$2"),	"^(.+\dEE0.+\d)EE0(.+\dEE0.+\d)+$","$1EE0_$2")	 ;combo


msgbox % strNew1
msgbox % strNew2
msgbox % strNew3


Разбор шаблонов RegEx:

+ strNew1

(\d)EE(.)
$1EE0$2

Перед EE должна быть любая цифра, а после EE может быть любой символ. Это нужно что бы EE заменялся только в нужных местах. $1 и $2 Возвращают эти части без изменений.

+ strNew2

^(.+\dEE.+\d)EE(.+\dEE.+\d)+$
$1EE_$2

^$ Скрипт должен начать поиск с начала строки и закончить в конце, то есть строка должна 100% совпадать с шаблоном.

Пропускаем первое совпадение EE и его окружающий текст.

Пропускаем 3е совпадение и более. Этот шаблон похож на красный, но в этом есть в конце знак +, это значит что этот шаблон может повторятся.

Конец шаблона.

+ strNew3

Все то же самое что и выше. Сначала ставим везде нули и второй заменой ставим на второе совпадение знак нижнего подчеркивания. Только вместо EE указываем уже EE0.

!!Скорей всего у вас вместо Text1, Text2, Text3 и т.д. находится полноценный текст и скорей всего он может Не окончится цифрой(словно индекс text1) и скрипт уже не сможет найти нужную часть и заменить. Если это так то можете привести примеры что там может быть.

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

+ открыть спойлер
str = Text1Text2EEText3Text4EEText5EEText6

strNew1 := RegExReplace(str,"EE","EE0")
strNew2 := RegExReplace(str,"^(.+EE.+)EE(.+EE.+)+$","$1EE_$2")
strNew3 := RegExReplace(	RegExReplace(str,"EE","EE0"),	"^(.+EE0.+)EE0(.+EE0.+)+$","$1EE0_$2")	 ;combo


msgbox % strNew1
msgbox % strNew2
msgbox % strNew3

3 (изменено: Akatosh, 2016-07-03 13:41:22)

Re: AHK: Добавить текст в переменной после нужного символа

yalanne
Спасибо!
Да, вы правы, вместо Text1Text2 у меня полноценный текст, каждое предложение заканчивается символом ";"
Количество предложений и текст в них может меняться, но ";" в конце каждого предложения будет стоять всегда.
Хотелось бы, чтобы в конце каждого предложения стоял перенос строки (`n)

Tekst = Полноценный текст номер один;полноценный текст номер два;Третье предложение полноценного текста

(Начинаться может как с заглавной, так и с маленькой буквы.)
Ещё известно, что 3е предложение содержит важную для меня информацию, я ещё не знаю какую,  для этого надо перед ним поставить [!]
Конечный вариант:

Полноценный текст номер один;
полноценный текст номер два;
[!]Третье предложение полноценного текста;
Четвертое;

Извиняюсь за то, что сразу не смог правильно сформулировать вопрос:(

4

Re: AHK: Добавить текст в переменной после нужного символа

#CommentFlag \\
\\ Изменяем символ для комментария, по умолчанию точка с запятой.


Text = Полноценный текст номер один. Второе предложение первого текста. Это третее предложение в 1ом тексте;полноценный текст номер два. предложение два,текст2. предл3 в втором тексте; Offer number one in the third text. текст3 = offer[2]. Третье предложение полноценного текста. ; четвертый текст.
TextNew1 := RegExReplace(Text,";","`n")
TextNew2 := RegExReplace(TextNew1,"U)^(.*`n.*`n).*\..*\.(.*\.).*(`n.*)$","$1[!]$2$3")

msgbox % TextNew1
msgbox % TextNew2