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

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

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

5

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

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

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

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

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

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

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

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

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

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

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

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

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

14

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

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

15

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

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

16

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

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

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

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

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

25

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

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