1 (изменено: unKn0wn, 2013-11-29 16:04:52)

Тема: AHK: Работа с текстом в буфере и вывод готовой информации

Нужна помощь разобраться с этой нелёгкой темой.
В буфер нужно вогнать текст типа:

BMWx7: : To be added...

Но, этот текст может быть и такого вида:

OPEL: Astra97 Best: dream

Важен текст который заключен в двоеточии :Astra:. В случае, если текста нет в двоеточии, то использовать текст стоящий перед двоеточием. Но независимо от расположения текста его нужно предварительно "очистить".
Первый символ должен быть заглавным, остальные маленькими, цифровая часть должна быть упразднена, в случае если не одно слово, а несколько, то оставить лишь одно слово(как к примеру "Astra97 Best" -> "Astra"). Что-то вроде такого должно получится на выходе:
1)Bmwx -укоротили буковки и убрали цифру.
2)Astra -подрезали цифры и отбросили ещё одно слово.
И выход инфы в месседжбокс.

Грубо говоря: Скопировать в буфер, расковырять в буфере, вытащить нужное слово без шелухи и вывести.

Даже не знаю возможно ли такое сделать в буфере, с файлом тхт ещё можно как-то повозится, но буфер для меня загадка 80го левела.

2

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Текст в буфере обмена — это встроенная переменная Clipboard. Какой текст ей присвоите, такой и будет в буфере. Так что никаких загадок.

3 (изменено: unKn0wn, 2013-11-30 04:01:38)

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Спасибо за пинок в нужную сторону.
Нашел очень подходящий пример:


Source:=Clipboard
Found:=RegExMatch(Source, "U)(?:\s|\R|^)хххххх:\s+(.+)(?:\s|\R|$)", Match)
If Found
  MsgBox, %Match1%
Else
  MsgBox, Не найдено.

Но не как не могу разобраться с регулярными выражениями
А именно в случае если мне нужно искать сперва одно первое слово которое заключено в двоеточие: ":spaceслово1 слово2:" и очистить его от цифр, а если не находит то искать уже с другим условием -брать слово идущее перед ":space" такого вида должны быть регулярные выражения:


Source:=Clipboard
Found:=RegExMatch(Source, "U)(?:\s|\R|^):\s+(.+)(?:\s|\R|[^0-9]|$)", Match)
If Found
  MsgBox, %Match1%
Else
 MsgBox, Не найдено.
 ;Found:=RegExMatch(Source, "U)(?:\s|\R|^):\s+(.+)(?:\s|\R|[^0-9]|$)", Match)
;If Found
 ;MsgBox, %Match2%

OPEL: Astra97 Best: dream

Из этого должно по идее получится это: Astra и dream(Пока ещё не понял как искать текст конкретно в "::") Но что-то идёт не так..
Со вторым условиям я пока не разбирался, но судя по рег.выражениям всё будет упираться в якоря.
PS: Спасибо за вашу наработку

4 (изменено: serzh82saratov, 2013-11-30 16:59:59)

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Что-то типа этого:


txt1 = BMWx7: : To be added...
txt2 = OPEL: Astra Best: dream
txt3 = OPEL: Astra97 Best: dream 
txt := txt1


RegExMatch(txt, "(.*?):\s*(.*?):", Match) 
str := Match2 = "" ? Match1 : Match2
str := RegExReplace(str, "(.*?)(\d|\s).*", "$1")
StringLower, str, str, T
MsgBox % str
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: unKn0wn, 2013-12-02 15:44:54)

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Работает как надо! И с ново выручили, спасибо!
Хотя даже со столь простым набором рег.выражений я не могу разобраться. Собственно мучает вопрос о символах типа ",.!"№;%:?*()_=+-[]\/" Да и к тому-же, может быть такое: "OPEL: Astra_Best: dream" или "OPEL: Astra.Best: dream" -здесь я даже не знаю что придумать, так чтобы резать символы(оставив только буквы) и после него чтобы не лезли слова.
Решил сделать вот так:


txt1 = BMWx7: : To be added...
txt2 = OPEL: Astra Best: dream
txt3 = OPEL: Astra97 Best: dream 
txt := txt1


RegExMatch(txt, "(.*?):\s*(.*?):", Match) 
str := Match2 = "" ? Match1 : Match2
str := RegExReplace(str, "(.*?)(\d|\s|[^,.]).*", "$1")
StringLower, str, str, T
MsgBox % str

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

6 (изменено: serzh82saratov, 2013-12-02 22:45:24)

Re: AHK: Работа с текстом в буфере и вывод готовой информации


txt1 = BMWx7: : To be added...
txt2 = OPEL: Astra Best: dream
txt3 = OPEL: Astra97 Best: dream 
txt4 = OPEL: Astra.Best: dream
txt5 = OPEL: Astra_Best: dream
txt := txt5


RegExMatch(txt, "(.*?):\s*(.*?):", Match)  
str := Match2 = "" ? Match1 : Match2
str := RegExReplace(str, "([a-zA-Zа-яА-Я]+).*", "$1")
StringLower, str, str, T
MsgBox % str

А может так правильнее:


txt1 = BMWx7: : To be added...
txt2 = OPEL: Astra Best: dream
txt3 = OPEL: Astra97 Best: dream 
txt4 = OPEL: Astra.Best: dream
txt5 = OPEL: 32._Astra_Best: dream
txt6 = _BMWx7,ert: : To be added...
txt := txt5


RegExMatch(txt, "(.*?):\s*(.*?):", Match)  
Match := Match2 = "" ? Match1 : Match2
RegExMatch(Match, "[a-zA-Zа-яА-Я]+", Match) 
StringLower, Match, Match, T
MsgBox % Match

Не могли бы вы подсказать, в чем дело?

В двух словах тут непоможешь, читайте русский хелп по RegEx, в нём исчерпывающая инфо.

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

7 (изменено: unKn0wn, 2013-12-03 09:38:15)

Re: AHK: Работа с текстом в буфере и вывод готовой информации

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


[^0-9,._-;'+=<>!@#$%^&*():{}[]\|]

Выходит как-то странно...

8

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Так?


RegExMatch(txt, "(.*?):\s*(.*?):", Match)   
Match := Match2 = "" ? Match1 : Match2
RegExMatch(Match, "[^\s0-9\Q,._-;'+=<>!@#$%^&*():\{}[]|\E]+", Match)  
StringLower, Match, Match, T
MsgBox % Match 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Работа с текстом в буфере и вывод готовой информации

Да, работает как нужно, пока на "камни" не нарвался . Спасибо.