RegExp für einzelnes Wort

Giglio

Giglio

Doppel-As
Hi,

weiß jemand welcher Reguläre Ausdruck genau das erste (n-te) Wort einer Zeile meint?

Mfg

Sebi
 
Kommt drauf an wie man "Wort" definiert - definiere es mir, dann erstelle ich dir einen Regex.
 
Hi,

naja ein Wort also eine Folge von Buchstaben die dann durch ein Leerzeichen beendet wird.
z.B.

Herr Müller

Jetzt möchte ich entweder auf Herr oder Müller zugreifen. Also mit \(...\). Blos was halt in die Klammer kommt :)

Mfg

Sebi
 
Hallo,

ich kann mir grade nicht genau vorstellen, wie das im Zusammenhang aussehen soll. Gib mal ein konkreteres Beispiel.

Aber ich vermute fast, dass das, was du machen möchtest, so nicht geht, da regexe auf ein Pattern matchen. Man kann also nur mit Mustern arbeiten, für was anderes, z.B. Grammatik, ist eine regex nicht zu gebrauchen. Aber vielleicht macht ein Beispiel das deutlicher :)
 
Also Wörter sind bei dir durch Whitespace getrennt? Oder nur durch ein Space Zeichen? Gehen Tabs auch?
Welche Sprache verwendest du? Bzw. welches Tool wird gebraucht? Sed,awk,grep?
Beantworte diese Fragen bitte!

Ich nehme für eine erste Lösung Perl an und alle Sorten von Whitespace.

echo "Ein Beispiel aus dem Unixboard wir wollen das 5. Wort" | perl -wlne 'print $1 if m/(?>\w+[-.,;:!?]?\s?){4}(\w+)/;'
 
Zuletzt bearbeitet:
Hi,

danke schon mal für den Lösungsansatz in Perl.
Ich hätte den Ausdruck für sed gebraucht, heißt einen regulären Ausdruck.
Die Wörter sind durch Leerzeichen voneinander getrennt.

Mfg

Sebi
 
Hi,

Als Wort könnte man z. B. alle Wortzeichen (\w welches [a-zA-Z0-9]* entspricht) zwischen den Leerzeichen definieren.
Wenn es Dir aber nur um absolute Wortpositionen statt Suchmustern geht, nimmst Du vielleicht einfacher awk:

Code:
awk 'NR==3{print $2}' input_file

Gibt das zweite Wort der dritten Zeile aus (Standard-Feldtrenner sind Leerzeichen bzw. Tabs - mit dem Schalter '-F' änderbar)

Gruß Daniel
 
in python :
re.search("(\w+)",zeile).group(1)
 
Hallo
Für sed einigermaßen Posix-konform dürfte das hier funktionieren:
Code:
$ echo "Das ist ein Test"|sed -e 's/^[[:space:]]*\([^[:space:]]*\)[[:space:]].*$/\1/'
Das
$ echo -e " Das\tist ein Test mit führenden Leerzeichen und gemischten Tabulatoren"|sed -e 's/^[[:space:]]*\([^[:space:]]*\)[[:space:]]*.*$/\1/'  

$ echo "   Das      ist ein Test mit mehreren Leerzeichen"|sed -e 's/^[[:space:]]*\([^[:space:]]*\)[[:space:]]*.*$/\1/'
Das

Du solltest dir im Klaren sein, dass Regexp nicht gleich Regexp ist.
Perl bietet noch die komfortabelste und portierbarste Lösung an.
Dann gibt es eRegexp (erweiterte) und basis Regexp in der Shell...
Also ist es schon vom verwendeten Tool abhängig.

Gruß Wolfgang
 
Ah, du kannst auch einfach cut benutzen.
also cut -d ' ' -f ZAHL
 
cut funktioniert nur, wenn es keine oder eine feste Anzahl von Leerzeichen am Beginn gibt. Deshalb ist wohl sed, awk oder Perl flexibler und zuverlässiger.

Code:
$ echo "   mit mehreren Leerzeichen am Beginn"|cut -d' ' -f1

wolle@Nietzsche:/tmp
$ echo "   mit mehreren Leerzeichen am Beginn"|sed -e 's/^[[:space:]]*\([^[:space:]]*\)[[:space:]].*$/\1/'
mit
Hängt also vom zu erwarteten Text ab.


Gruß Wolfgang
 
Schon, aber OP hat oben gezeigt wie das Format ist, also keine Leerzeichen offensichtlich am Anfang der Zeile.
 

Ähnliche Themen

Hilfe für ein shell script

PATH wird nicht richtig durchsucht

subprocess.Popen() - Stream Stout

RegExp für "Wort|NN"

MacBook Pro hat Benutzer-Konten vergessen

Zurück
Oben