frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:(?:.|[\s\R ])*?)(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)'))
Jeśli np. gdzieś masz pominięte cudzysłowy, apostrofy w tym XML, to wtedy do tego regex'a wprowadź, to żeby po pierwszym słowie był biały znak i przed trzecim słowem, też był biały znak. Regex wyglądałby chyba tak:
...[\s\R ]...[\s\R ]
, to ma być po frog="..." i przed deer="...", tak jak w poniższym regex:
frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:[\s\R ](?:.|[\s\R ])*?[\s\R ])(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)'))
Testowe dane:
frog="rabbit\"rabbit'" hello deer="123"
frog="rabbit" hello " deer="80"
frog="rabbit\" '' jsfsfjjsdkfjhjahdjfhjh \" next next next continue continue continue break; "......deer="0"
frog=".*?" hello " 890 deer=".*?"
frog=".*?\" hello "..890 deer=".*?"
frog=".dfsf"
hello
deer="4"
frog="...frog="frog="..."" underline"
world!!
deer="123"
frog="...frog=\"frog=\"...\"\" underline"
world!!
deer="45'6"
frog=" deer=\"..\" " .... deer="."
frog=" ' ' .... deer="567"
deer="567"
frog='hello' welcome deer="n"
frog='hello" " " hello " ' hello
deer="b"
frog='hello \" \" \' dsfsfd " dsff '
sdfsdf
deer="q"
frog="sdfs\"'sdkfjksdjfsd" hello
hh
deer="''' ' dsfsdf dsf sd \" sdhfjhdsf " hello
frog=".."
deer="..."
frog="..sdf\"jfsdf"
dsfsd
frog='sdfsd\'sdfsdf"' hello
ddeer="45"
frog="."deer="."
frog="1,000"wartosc_zakupu_netto="8,54"deer='8,54'
Zamiast frog możesz wpisać ilosc oraz analogicznie zamiast deer możesz wpisać cena_zakupu_netto.
W pierwszym polu w Notepad++, wklej ten wzór regex, co podałem na samej górze. W następnym polu zaś wpisz jedną spację.
Regex'y testowałem na Regex101.com. Niekiedy korzystałem z Youtube (tutorial - regex).
Jeśli pomiędzy dwoma wyrazami masz jakieś specyficzne znaki to uwzględnij je w regex. Wystarczy, że do tej klasy znaków [\s\R], dopiszesz to, czego potrzebujesz do znalezienia poprzez regex.
W Notepad++ testowałem ten regex na UTF-8 i UTF-8 bez BOM.
frog= # (1) dopasuj zestaw znaków, który rozpoczyna się frog=
(?: # (2) zaczyna nie przechwytuj grupy
".*?(?<!\\)" # (3) dopasuj znak cudzysłowia, następnie wszystko, co jest poprzedzone backslash'em nawet cudzysłów, dopasowanie kończ, gdy znajdziesz cudzysłów, który nie jest poprzedzony backslash'em
| # (4) (alternatywa) dopasuj albo (3) albo (5), jest to podobne do boolean'a OR
'.*?(?<!\\)' # (5) (from (3)) -||- apostrofu -||- apostrof -||- apostrof
) # (6) kończy nie przechwytywanie grupy
\K # (7) Wszystko, co wcześniej dopasowałeś zresetuj, wyrzuć ze zbioru dopasowania
(?: # (2) (rep1)
(?: # (2) (rep2)
. # (8) dopasuj dowolny znak oprócz pewnej grupy znaków jak np. \s
| # (9) (alternatywa) dopasuj albo (8) albo (10), jest to podobne do boolean'a OR
[\s\R ] # (10) dopasuj zestaw znaków, który kryje się pod hasłem \s oraz \R i spacja
)*? # (11) całą grupę wyrażenia powtarzaj niezachłannie (lazy), aż do napotkania wyrażenia deer="tutaj może być cokolwiek" lub deer='tutaj może być cokolwiek'
) # (6) (rep1)
(?= # (12) positive lookahead - jeśli przed tym stoi ciąg znaków, to dopasuj ciąg znaków, który stoi przed tym operatorem
deer= # (13) dopasuj zestaw znaków, który rozpoczyna się deer=
(?: # (2) (rep3)
".*?(?<!\\)" # (3) (rep1)
| # (14) (alternatywa) dopasuj albo (3) (rep1) albo (5) (rep1), jest podobne do boolean'a OR
'.*?(?<!\\)' # (5) (rep1)
) # (6) (rep2)
) # (15) nawias kończący positive lookahead (przewidywanie pozytywne w przyszłość)
# legenda (oznaczenia):
# (repX) - powtórzenie, któregoś podpunktu X razy
# -||- - powtórzenie tego samego tekstu, oprócz tego co jest obok wymienione
# (from (X)) - z którego punktu ma być czytany tekst
Jeśli np. dla takich danych:
frog="i"deer="a"
nie chcesz mieć wstawionej spacji pomiędzy te dwa wyrazy, to wtedy możesz zastosować poniższy regex:
(?(?=frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)')))(\0)|frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:(?:.|[\s\R ])*?)(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)')))
Spacja nie zostanie dodana dzięki powyższemu regex'owi, lecz jeśli może tam być spacja, to wtedy zastosuj regex, który podałem na samej górze, on doda spację i wtedy dla takich danych:
frog=''deer=""
frog='x'8'deer="100\""
będzie spacja pomiędzy wyrazami, takimi jakimi będziesz chciał. Czyli po replace, będzie to wyglądać tak:
frog='' deer=""
frog='x' deer="100\""
Inne (część druga, część pierwsza jest w komentarzu):
mytekst=".*?"(?(?=\x{0003})(.)(.))\K.*?(?=here=".*?")
((mytekst=".*?")(here=".*?"))|((mytekst=".*?).+?(here=".*?"))
((mytekst=".*?")(?=here=".*?"))|((mytekst=".*?").+?(?=here=".*?"))
((mytekst=".*?")\K[[:<:]][[:>:]](?=here=".*?"))|((mytekst=".*?")\K.+?(?=here=".*?"))
((mytekst=".*?")\K^$(?=here=".*?"))|((mytekst=".*?")\K((.|[\s\R])+?)(?=here=".+?"))
(?(?=mytekst=".*?"[[:<:]][[:>:]](?=here=".*?"))log|mytekst=".*?".+?(?=here=".*?"))
(?(?=mytekst=".*?"(?=here=".*?"))(h)|mytekst=".*?"\K(.|[\s\R])+?(?=here=".*?"))
(?(?=mytekst=".*?"(?=here=".*?"))(\0)|mytekst=".*?"\K(.|[\s\R])+?(?=here=".*?"))
(?(?=mytekst=".*?"(?=here=".*?"))(\0)|mytekst=".*?"\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=mytekst=".*?"(?=here=".*?"))(\0)|mytekst=".*?"\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=mytekst=""*.*"*"(?=here=".*?"))(\0)|mytekst=""*.*"*"\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=mytekst="(("|.)*).*?(("|.)*)"(?=here=".*?"))(\0)|mytekst="(("|.)*).*?(("|.)*)"\K(?:.|[\s\R])+?(?=here=".*?"))
(mytekst=".*?"(?=["])["]\K).*?(?=here=".*?") <-- this
(?(?=mytekst=".*?"(?=here=".*?"))(\0)|mytekst=".*?"\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=(mytekst="[[:<:]].*?[[:>:]]""|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst="[[:<:]].*?[[:>:]]""|mytekst=".*?")\K(?:.|[\s\R])+?(?=here=".*?")) <-- this
(?(?=(mytekst="\b.*?\b""|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst="\b.*?\b""|mytekst=".*?")\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=(mytekst="\b.*?\b"*"|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst="\b.*?\b"*"|mytekst=".*?")\K(?:.|[\s\R])+?(?=here=".*?"))
(?(?=(mytekst="\b.*?\b"|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst="\b.*?\b"|mytekst=".*?")\K(?:.|[\s\R])+?(?=here=".*?")) <-- last?
(?(?=(mytekst=".*?"|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst=".*?"|mytekst=".*?").\K(?=(?:.|[\s\R])+?(?=here=".*?"))).*?(?=here=".*?")
(?(?=(mytekst=".*?"|mytekst=".*?")(?=here=".*?"))(\0)|(mytekst=".*?"|mytekst=".*?").\K(?=(?:.|[\s\R])+?(?=here=".*?"))).*?(?=here=".*?")
(mytekst=".*"(?=(.*?)(?=here=".*?"))\K).*?(?=here=".*?")
(?:mytekst=".*")(?=(.*?)(?=here=".*?"))
(?:(?:mytekst=".*")(?=((.|[\s\R])*?)(?=here=".*?"))\K).*?(?=here=".*?")
(?:(?:mytekst=".*")(?=(?:.*)(?=here=".*"))).*(?=here=".*")
(?:(?:(?:mytekst=".*")\K))(?= text )
(?:(?:(?:mytekst=".*")\K))(?=.*?(?=here=".*?")) <-- empty string e.g.
(?:mytekst="[[:<:]].*[[:>:]]"\K.*?)(?=here=".*?") <-- here?
(?:mytekst="[[:<:]].*[[:>:]]"*"\K.*?)(?=here=".*?")
mytekst="(?:\b.*\b)"*\d*"\K(?:(?:.|[\R])*?)(?=here=".*?")
mytekst="(?:\b.*\b)"*\d*"\K(?:[^"](?:.|\s[\R])*?\b)(?=here=".*?")
mytekst="(?:\b.*\b)"*"(?:\K.(?:.|[\s\R])*?)(?=here=".*?")
mytekst=""*(?:\b.*\b)"*"(?=.|[\s\R])(?:\K(.)(?:.|[\s\R])*?)(?=here=".*?")
mytekst=""*(?:\b.*\b)"*"\K(([\s\R]*?|.*?)|.*?|[\s\R]*?)(?=here=".*?")
(?:mytekst=".*")\K.*?(?=.*?)(?=here=".*?")
(?:mytekst=".*")\K(?=(.|[\s\R])*?)[^"]*?(?=here=".*?") <-- this
(?(?=((mytekst=".*")\K[[:<:]].*?[[:>:]](?=here=".*?"))(.)|((?:mytekst=".*")\K(?=(.|[\s\R])*?)[^"]*?(?=here=".*?"))))
(?(?=(mytekst=".*"(?=here=".*?")))(\0)|((?:mytekst=".*")\K(?=(.|[\s\R])*?)[^"]*?(?=here=".*?"))) <-- this
(?(?=(mytekst=".*"(?=here=".*?")))(\0)|(?:(?:mytekst=".*")\K(?=(?:.|[\s\R])*?)[^"]*?(?=here=".*?"))) <-- this
(?(?=(mytekst=".*"(?=here=".*?")))(\0)|(?:(?:mytekst=".*?"(?=.*?(?=here=".*?")))\K(?=(?:.|[\s\R])*?)[^"]*(?=here=".*?")))
(?(?=(mytekst=".*"(?=here=".*?")))(\0)|(?:(?:mytekst=".*?"(?=.*?(?=here=".*?")))\K(?:(?:.|[\s\R])*?)(?=here=".*?")))
mytekst=".*"(?:\K.*?(")((?=here=.*?"))) <-- this
mytekst=".*"(?:\K(.*?|[\s\R]*?))((").*((?=here=.*?")))
mytekst=".*"\K(?=(.|[\s\R])*?)[^"]*(?=here=".*?")
mytekst=".*"\K(?=(.|[\s\R])*?)[^"]*(?=here=".*?") <-- this?
mytekst=".*"\K(?=(.|[\s\R])*?)[^(\")]*(?=here=".*?")
mytekst="([^(\)][^(")])*"\K(?:(.|[\s\R])*?)(?=here=".*?")
mytekst="([\\](?="))*"\K(?:(.|[\s\R])*?)(?=here=".*?")
frog=".*?(?<!\\)"\K(?:(?:.|[\s\R])*?)(?=deer=".*?")
frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:(?:.|[\s\R])*?)(?=deer=".*?")
frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:(?:.|[\s\R])*?)(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)')) <-- this??
frog=(?:".*?(?<!\\)"|'.*?(?<!\\)')\K(?:(?:.|[\s\R])*?)(?=deer=(?:".*?(?<!\\)"|'.*?(?<!\\)'))