Regex in Powershell
Moin zusammen,
ich habe mal wieder eine Frage zu einem Phänomen, das ich nicht ganz verstehe.
Emailbody:
Ich mache eine Prüfung ob in einer Schnittstellen-Email alle Informationen für eine postalische Retoure vorhanden sind.
Das ganze läuft über eine einfache Regex-Abfrage "Nimm mal alles was hinter $part steht...."
Nun prüfe ich einen Punkt "Land" und erhalte dort zumeist "Deutschland", falls mal was anderes als Deutschland oder Österreich steht, löst eine Fehlermeldung eine Email aus, die dem Versender mitteilt, dass wir dieses Land nicht bedienen.
Lustig bei dem ganzen wird es, sobald unter "Vorname", der hier gar nicht abgefragt wird, der Kollege dann wie im Beispiel "Roland" heißt. Mein Script meldet stolz "Das Land MüllerSchulze gibt es nicht, bitte prüfen Sie die Daten!"
Ich wundere mich darüber, weil bei Land tatsächlich der Nachname OHNE "Nachname" steht, heißt, ich könnte es nachvollziehen wenn "Das Land Nachname MüllerSchulze...." da stehen würde.
Der OnlineRegex builder findet übrigens nur "Deutschland" bei Eingabe
Hoffe jemand hat da eine Idee für mich (oder eine Liste wie viele "land" Namen es gibt, dann prüf ich das einzeln^^)
Gruß
Sascha
ich habe mal wieder eine Frage zu einem Phänomen, das ich nicht ganz verstehe.
Emailbody:
Vorname Roland
Nachname MüllerSchulze
....
Land Deutschland
function CheckTextBody{
# Wir prüfen, ob die Daten plausibel sind an
$CheckStrings = @("Nachname","Straße","Hausnummer","Wohnort","Land","PLZ","Emailadresse","Seriennummer")
try{
if ($CheckedString -Match "((?s)(data:.*:data))" -eq $true){
Foreach ($part in $CheckStrings){
$CheckedString -Match "(?<=$part)( +)(\w+)(\b)"
.......
Ich mache eine Prüfung ob in einer Schnittstellen-Email alle Informationen für eine postalische Retoure vorhanden sind.
Das ganze läuft über eine einfache Regex-Abfrage "Nimm mal alles was hinter $part steht...."
Nun prüfe ich einen Punkt "Land" und erhalte dort zumeist "Deutschland", falls mal was anderes als Deutschland oder Österreich steht, löst eine Fehlermeldung eine Email aus, die dem Versender mitteilt, dass wir dieses Land nicht bedienen.
Lustig bei dem ganzen wird es, sobald unter "Vorname", der hier gar nicht abgefragt wird, der Kollege dann wie im Beispiel "Roland" heißt. Mein Script meldet stolz "Das Land MüllerSchulze gibt es nicht, bitte prüfen Sie die Daten!"
Ich wundere mich darüber, weil bei Land tatsächlich der Nachname OHNE "Nachname" steht, heißt, ich könnte es nachvollziehen wenn "Das Land Nachname MüllerSchulze...." da stehen würde.
Der OnlineRegex builder findet übrigens nur "Deutschland" bei Eingabe
Hoffe jemand hat da eine Idee für mich (oder eine Liste wie viele "land" Namen es gibt, dann prüf ich das einzeln^^)
Gruß
Sascha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1121243691
Url: https://administrator.de/contentid/1121243691
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
7 Kommentare
Neuester Kommentar
Moin Sascha,
was soll dieses "-eq true" bringen?
Match gibt bereits ein Wahrheitswert aus - dann noch mal zu prüfen ob $true -eq $true ist - vollkommen useless use.
Du solltest dir angewöhnen, nur Werte in Gruppen zu packen, die du auch wirklich benötigst.
Durch sowas wie "( +)" hast du nachher eine Gruppe mit lauter Leerzeichen, die dir nichts nutzt (mal davon abgesehen, dass du diese Leerzeichen auch noch in die Lookbehind-Assoziation hättest packen können).
Deine Daten stehen doch immer am Zeilenanfang, wieso suchst du dann nicht auch, ob die Zeichenkette am Zeilenanfang steht - so hast du auch keine Probleme mit Namen wie Roland.
Gruß Thomas
was soll dieses "-eq true" bringen?
Match gibt bereits ein Wahrheitswert aus - dann noch mal zu prüfen ob $true -eq $true ist - vollkommen useless use.
$CheckedString -Match "(?<=$part)( +)(\w+)(\b)"
Durch sowas wie "( +)" hast du nachher eine Gruppe mit lauter Leerzeichen, die dir nichts nutzt (mal davon abgesehen, dass du diese Leerzeichen auch noch in die Lookbehind-Assoziation hättest packen können).
Deine Daten stehen doch immer am Zeilenanfang, wieso suchst du dann nicht auch, ob die Zeichenkette am Zeilenanfang steht - so hast du auch keine Probleme mit Namen wie Roland.
$CheckedString -Match "(?m)(?<=^$part +)\w+\b"
Gruß Thomas
Zitat von @TheUnreal:
@thomas
was soll dieses "-eq true" bringen?
Es hat nichts mit der Match-Abfrage zu tun, sondern ist eine Überprüfung ob "data:" und ":data" in der Mail vorhanden sind.
Natürlich hat das damit zu tun... oder besser gesagt: Eben genau DAS ist ja gerade die Match-Abfrage!@thomas
was soll dieses "-eq true" bringen?
Es hat nichts mit der Match-Abfrage zu tun, sondern ist eine Überprüfung ob "data:" und ":data" in der Mail vorhanden sind.
Das "-eq $true" hat da nichts mehr verloren.
Zitat von @TheUnreal:
Ich finde aber keine Information zum "m"? Welche Sonderfunktion hat es, bitte? Denn obwohl das Zirkumflex den Zeilenanfang markieren soll, funktioniert es nicht ohne das m.
Regex OptionenIch finde aber keine Information zum "m"? Welche Sonderfunktion hat es, bitte? Denn obwohl das Zirkumflex den Zeilenanfang markieren soll, funktioniert es nicht ohne das m.
Gruß Thomas