Benutzer mit den meisten Antworten
Position eines Wortes innerhalb einer Zeile bestimmen

Frage
-
Hallo,
gibt es eine Möglichkeit die Position eines Wortes innerhalb einer Zeile zu bestimmen?
was ich bräuchte wäre die Anfangs- und Endposition damit ich von dort aus z.b. + den nächsten part (zB.Position des letzten Zeichen des Wortes und die folge Länge (20,13)) auslesen kann.
Gruß
Armin
Antworten
-
Ja, das geht mit Regex:
$Zeile = "gibt es eine Möglichkeit die Position eines Wortes innerhalb einer Zeile zu bestimmen" $suchwort = "Wortes" $regex = [regex]"\b$suchwort\b" $Fundstellen = $regex.Matches($Zeile) Foreach ( $Fundstelle in $Fundstellen) { write-host "Das Wort startet bei Zeichen:" (($Fundstelle.index)+1) write-host "Das Wort endet bei Zeichen:" ((($Fundstelle.index)+1)+($Fundstelle.Length)) }
Zur Erklärung: ".matches()" findet jedes Auftreten des zuvor definierten Regulären Ausdrucks (Regex) im Text. Die beiden "\b" im Ausdruck beschreiben die Wortgrenzen, da sonst das Suchwort auch innerhalb anderer Wörter erkannt würde.Das Ergebnis von .matches besteht dann aus einem Array aller Fundstellen (in diesem Fall nur eine):
Groups : {Wortes} Success : True Captures : {Wortes} Index : 44 Length : 6 Value : Wortes
Deren Eigenschaften kannst du dann wie oben im Skript gezeigt weiterverwenden.
Achja, bei RegEx wird standarmässig Groß- und Kleinschreibung unterschieden, falls du das nicht möchtest, musst du die eine Zeile folgendermassen ändern:$regex = [regex]"(?i)\b$suchwort\b"
Hier gibts noch mehr Infos zu RegEx.
Grüße, Denniver
http://bytecookie.wordpress.com/- Als Antwort markiert AucheinName Mittwoch, 6. Juli 2011 11:13
Alle Antworten
-
Ja, das geht mit Regex:
$Zeile = "gibt es eine Möglichkeit die Position eines Wortes innerhalb einer Zeile zu bestimmen" $suchwort = "Wortes" $regex = [regex]"\b$suchwort\b" $Fundstellen = $regex.Matches($Zeile) Foreach ( $Fundstelle in $Fundstellen) { write-host "Das Wort startet bei Zeichen:" (($Fundstelle.index)+1) write-host "Das Wort endet bei Zeichen:" ((($Fundstelle.index)+1)+($Fundstelle.Length)) }
Zur Erklärung: ".matches()" findet jedes Auftreten des zuvor definierten Regulären Ausdrucks (Regex) im Text. Die beiden "\b" im Ausdruck beschreiben die Wortgrenzen, da sonst das Suchwort auch innerhalb anderer Wörter erkannt würde.Das Ergebnis von .matches besteht dann aus einem Array aller Fundstellen (in diesem Fall nur eine):
Groups : {Wortes} Success : True Captures : {Wortes} Index : 44 Length : 6 Value : Wortes
Deren Eigenschaften kannst du dann wie oben im Skript gezeigt weiterverwenden.
Achja, bei RegEx wird standarmässig Groß- und Kleinschreibung unterschieden, falls du das nicht möchtest, musst du die eine Zeile folgendermassen ändern:$regex = [regex]"(?i)\b$suchwort\b"
Hier gibts noch mehr Infos zu RegEx.
Grüße, Denniver
http://bytecookie.wordpress.com/- Als Antwort markiert AucheinName Mittwoch, 6. Juli 2011 11:13