none
Position eines Wortes innerhalb einer Zeile bestimmen RRS feed

  • 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

    Dienstag, 5. Juli 2011 13:44

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
    Dienstag, 5. Juli 2011 23:35
    Moderator

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
    Dienstag, 5. Juli 2011 23:35
    Moderator
  • Hallo Denniver,

    vielen Dank für Deine Antwort. Ich werds jetzt testen und berichten.

    Gruß

    Armin

    Mittwoch, 6. Juli 2011 07:58
  • Hallo Denniver,

    vielen Dank. Es funktioniert prima. Jetzt muss ich nur noch schauen wie ich den Einstieg wieder finde mit den neuen Erkenntnissen.

    Gruß

    Armin

    Mittwoch, 6. Juli 2011 11:12