Perl regex - kann ich sagen "wenn der Zeichenkette entspricht, löschen Sie Sie und alle zu Recht'?
Ich habe ein array von strings, von denen einige enthalten das Zeichen '-'. Ich möchte in der Lage sein zu suchen und diese Zeichenfolgen enthalten es ich wollen, löschen Sie alle Zeichen, die rechts von ihm.
So zum Beispiel, wenn ich habe:
$string1 = 'home - London';
$string2 = 'office';
$string3 = 'friend-Manchester';
oder etwas als solche, dann wird der betroffene strings werden würde:
$string1 = 'home';
$string3 = 'friend';
Ich weiß nicht, ob das Leerzeichen vor dem " - " im string enthalten danach (ich will es nicht wie ich will vergleichen von strings zu einem späteren Zeitpunkt, obwohl, wenn Sie nicht auf string-Vergleiche, dann ist es egal).
Ich weiß, dass ich kann suchen und ersetzen bestimmter Zeichenketten/Zeichen mit so etwas wie:
$string1 =~ s/-//
or
$string1 =~ tr/-//
aber ich bin nicht sehr vertraut mit regulären Ausdrücken in Perl also ich bin mir nicht 100% sicher, dass dieser. Ich habe sah sich um und konnte nichts sehen zu tun, mit 'to the right of'
im regex. Hilfe dankbar!
InformationsquelleAutor dgBP | 2012-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie alles löschen, was nach einem Bindestrich
-
mit dieser substitution:Jedoch, werden Sie wollen, entfernen Sie das Leerzeichen vor dem Bindestrich und so tun
Den
$
anchores die regex am Ende der Zeichenfolge und die/s
flag ermöglicht die Punkt-zu-match newlines als gut. Während die$
ist überflüssig, es könnte hinzufügen, Klarheit.Ihre substitution würde nur noch entfernt die erste
-
, und Ihre transliteration entfernt würden alle Bindestriche aus der string.InformationsquelleAutor amon
Ihre regulären Ausdrücke sind nur auf der Suche nach dem Armaturenbrett, so dass alles, was, die Sie ersetzen. Sie möchten suchen für die dash, und alles, was nach es.
. repräsentiert ein beliebiges Zeichen, * steht für die Suche nach Zeichen 0 oder mehr Male, und passen so viele wie möglich (d.h. an das Ende der Zeichenfolge, wenn möglich)
Können Sie auch suchen für eine optionale Leerzeichen vor dem.
(\s ist ein klarer Weg, um geben Sie ein Leerzeichen),
?
.Doh, natürlich. Nicht geben an diesem morgen. Bearbeitet.
InformationsquelleAutor matt freake
Verwendung einfacher
substr()
undindex()
möglich ist.$string =~
Bühne?eigentlich, habe ich beschlossen, ändern Sie es zu substr() und index (), denn dies wurde nicht gezeigt, aber... [-:
InformationsquelleAutor snoofkin
Die anderen Antworten sind gut. Jedoch, in Anbetracht dessen, was Sie sagte:
Brauchen Sie nicht in einem separaten Schritt. Angenommen, Sie wollen zu vergleichen
$string
mit anderen Variablen$search_string
. Der folgende Ausdruck prüft, ob eine exakte übereinstimmung, außer, dass es ignoriert alles$string
hat nach einem dash:$search_string
brauchen würde, zitiert zu werden, um sicherzustellen, dass Sie nicht als regulärer Ausdruck behandelt:/^\Q$search_string\E(\s*-|$)/
InformationsquelleAutor dan1111
#Using Regex:
InformationsquelleAutor learner