RegExReplace() auch mit kopierten Werten möglich?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

dermaxem
Posts: 5
Joined: 20 Jan 2022, 05:17

RegExReplace() auch mit kopierten Werten möglich?

Post by dermaxem » 20 Jan 2022, 05:29

Hallo,
ich bin ein Nutzer, mit wenig Programmiererfahrung.
Habe in der FB-Gruppe schon meine Sorgen gepostet, aber leider keine Antwort, die mir hilft.
Durch "rumprobieren" habe ich es geschafft, folgenden Umstand teilweise zu lösen.
In einer E-mail, die ich geöffnet und gelesen haben, drücke ich "Antworten".
Das erzeugt die Antwort-E-Mail und dort tippe ich dann meinen AHK-Trigger z.B. hier: #1test
das Makro drückt dann 3x die SHIFT-TAB-Taste, markiert die "An-Zeile", kopiert die An-Zeile, drückt 3x TAB (ist damit zurück im "Body")
Dort soll dann mit RegEx die kopierte Zeile angepasst werden.
Diese hat folgenden Aufbau: "NAME, VORNAME <E-Mail-Adresse>". Nun habe ich diesen String ja kopiert.
Wie kann ich denn mit RegEx diesen String als Variable auf "nur den Vornamen" reduzieren?
Gehrt das mit AHK überhaupt?
Ziel: In der Reply-E-Mail soll eine einfache Anrede mit "Hallo VORNAME, {enter}{enter} ..... text" erzeugt werden.
Mit den COM-Tools und VBA habe ich das versucht, kann aber nur Beispiele aus dem Netz nutzen und nicht selber programmieren.
das hat aber nicht funktioniert, da ich dort auch nicht auf den "nur Vorname"-Wert komme.
Zusatz:
Was ich derzeit im Einsatz habe, auch ziemlich funktional ist, wenn die E-Mail-Adresse eine best. Form hat:

Code: Select all

::#1test::
                SendInput, {shift down}{TAB}{TAB}{TAB}{shift up}
                Sleep 400
                SendInput, {CTRL down}{end}{ctrl up}{shift down}{ctrl down}{left}{ctrl up}{shift up}
                Sleep 400
                SendInput, ^c
                SendInput, {TAB}{TAB}{TAB}
                SendInput, ^v
                Sleep 400
                SendInput, {shift down}{ctrl down}{left}{left}{left}{left}{left}{left}{left}{ctrl up}{shift up}{Delete}{Backspace}
                SendInput, {ctrl down}{Home}{Shift down}{right}{right}{shift up}{ctrl up}{delete}
                SendInput, Hallo
                Send {Space}
                SendInput, {ctrl down}{right}{ctrl up},
                SendInput, {enter}{enter}
                SendInput, dertextblock
return
Danke für Eure Unterstützung.

KHA
Posts: 401
Joined: 21 Aug 2018, 11:11

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by KHA » 20 Jan 2022, 07:23

Wenn es so aufgebaut ist, wie im Beispiel, braucht man kein RegEx, versuch mal damit:

Code: Select all

Str := "NAME, VORNAME <E-Mail-Adresse>" ;Str durch Clipboard ersetzen für Zwischenablage
MsgBox, % Trim(StrSplit(SubStr(Str, 1, InStr(Str, "<") -1), ",",,2).2)

dermaxem
Posts: 5
Joined: 20 Jan 2022, 05:17

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by dermaxem » 20 Jan 2022, 07:28

wie bekomme ich das denn in mein Script? Oben habe ich ein Beispiel. Wo müsste ich das platzieren? Der String ist ja erst mal nur aus der AN-Zeile rauskopiert, und dann wieder im Body eingefügt.

KHA
Posts: 401
Joined: 21 Aug 2018, 11:11

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by KHA » 20 Jan 2022, 07:34

Muss jetzt zur Arbeit, versuch mal so:
(schnell geschrieben, nicht geteset)

Code: Select all

::#1test::
                SendInput, {shift down}{TAB}{TAB}{TAB}{shift up}
                Sleep 400
                SendInput, {CTRL down}{end}{ctrl up}{shift down}{ctrl down}{left}{ctrl up}{shift up}
                Sleep 400
                SendInput, ^c
                SendInput, {TAB}{TAB}{TAB}
                SendInput, ^v
                Sleep 400
                SendInput, {shift down}{ctrl down}{left}{left}{left}{left}{left}{left}{left}{ctrl up}{shift up}{Delete}{Backspace}
                SendInput, {ctrl down}{Home}{Shift down}{right}{right}{shift up}{ctrl up}{delete}
                SendInput, Hallo
                Send {Space}
                SendInput, {ctrl down}{right}{ctrl up},
                SendInput, {enter}{enter}
                SendInput, % "{Text}" Trim(StrSplit(SubStr(Str, 1, InStr(Str, "<") -1), ",",,2).2)

return

dermaxem
Posts: 5
Joined: 20 Jan 2022, 05:17

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by dermaxem » 20 Jan 2022, 07:52

hm.
ok, dann evtl. später mal weiter probieren. denn das soll ja meine Tasten-Aktionen ablösen.
Wenn das da am Ende steht, ist ja alles schon erledigt und abgeschnitten.
Wie gesagt. ich bin kein Programmierer
Aber vielen Dank schon mal.

dermaxem
Posts: 5
Joined: 20 Jan 2022, 05:17

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by dermaxem » 20 Jan 2022, 09:09

ach so. und die E-Mail-Adresse steht da nicht in den eckigen Klammern. Da steht dann "Name, Vorname [email protected]" wobei die längen auch unterschiedlich sein können.
Daher dachte ich, ich erkenne via RegEx die Adresse, und das führende Leerzeichen, dann links davon der Vorname bis zum ",<space>" und links davon steht der Name, der kommt auch weg.
Über bliebe der Vorname.
Die MsgBox im obigen Beispiel bleibt leer.

dermaxem
Posts: 5
Joined: 20 Jan 2022, 05:17

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by dermaxem » 20 Jan 2022, 11:52

ich glaub ich habe es. das gibt von meiner Zeichenkette nur den Vornamen:
pan, Peter [email protected]

Code: Select all

::#1test::
	Wort_array:= StrSplit(clipboard, [A_Space])
	MsgBox % Wort_array[2]

Return

KHA
Posts: 401
Joined: 21 Aug 2018, 11:11

Re: RegExReplace() auch mit kopierten Werten möglich?

Post by KHA » 20 Jan 2022, 14:54

Ja, würde aber bei doppelnamen z.B. pan, Hans Peter [email protected] nicht mehr funktionieren.
Hier sind meine vorschläge:
Ohne RegEx:

Code: Select all

Clipboard := "Name, Vorname [email protected]"
Str := Trim(Clipboard)
MsgBox, % Trim(StrSplit(SubStr(Str, 1, InStr(Str, A_Space,,0)), ",",,2).2)
Mit RegEx

Code: Select all

Clipboard := "Name, Vorname [email protected]"
Str := Trim(Clipboard)
RegExMatch(Str, "i)\w+\K,\s(.*?)\s\K[\w_\.-]+@[\w\.-]+\.[a-z\.]{2,6}", V)
MsgBox, % V1

Post Reply

Return to “Ich brauche Hilfe”