2017-05-31 6 views
0

Ich versuche, einen regulären Ausdruck zu erstellen, die in den folgenden Fällen WAHR oder FALSCH zurück:Regex, die etwas nach Text übereinstimmt, kein Raum ist

# Returns TRUE 
'Apples: 1' 
'Apples: are a fruit' 
'Apples: z' 
'Apples: I don't care what comes here if it's not only spaces or nothing' 

# Returns FALSE 
'Apples:' 
'Apples: ' 
'Apples:  ' 

Was habe ich versucht, so weit nahe kommt, aber ich kann ‚t scheinen den zweiten Teil zu decken:

'Apples: ' -match '^Apples:[A-Za-z0-9]*' 

Das einzige, was ist, muss es etwas nach dem Apples: kommt sein, dass kein Leerzeichen oder Leerzeichen sein kann. Aber dort sind einige Leerzeichen zuerst oder danach, aber es muss Text oder ein numerischer Wert in der Zeile sein.

Vielen Dank für Ihre Hilfe.

Antwort

2

Ich denke, was Sie brauchen, ist:

^Apples: *[A-Za-z0-9]+ 

Wo:

  • * bedeutet null oder mehr Räume
  • [A-Za-z0-9]+ bedeutet eine oder mehrere Zeichen des Typs A-Za-z0-9
0

können Sie die metacharacter Regex verwenden \w keine Wortzeichen entsprechen:

$Apples = 'Apples: 1','Apples: are a fruit','Apples: z','Apples:','Apples: ','Apples:  ' 

$Apples | ForEach {$_ -match '^Apples: \w' } 

Returns:

True 
True 
True 
False 
False 
False 

Erläuterung:

Die \ w metacharacter verwendet wird, finden ein Wort Charakter.

Ein Wortzeichen ist ein Zeichen aus a-z, A-Z, 0-9, einschließlich des _ (Unterstrich) -Zeichens.

0

Das in Python ist, aber sollte es tun. Die Regex sagt: Muss mit Äpfel beginnen :, dann ein Leerzeichen, dann ein NON-Space. Sie könnten auch \ w anstelle von \ S verwenden, aber das fängt nicht & *% $ type characters. Dein Anruf :) Hoffe das hilft!

import re 


thelist = ['Apples: 1', 'Apples: are a fruit', 'Apples: z', 'Apples: I dont care what comes here if its not only spaces or nothing', 'Apples:', 'Apples: ', 'Apples:  '] 
theregex = "^Apples:\s\S" 

for word in thelist: 
    if re.search(theregex, word): 
     print ("Hurrah, it's true") 
    else: 
     print ("Welcome to false town") 
3

Wenn Sie nur ein Spiel/wollen NOMATCH Sie einfach führen auf einen Doppelpunkt durch eine beliebige Anzahl von Leerzeichen und mindestens ein Nicht-Leerzeichen (:\s*\S), gefolgt passen könnte.

 
PS C:\>'Apples:' -match ':\s*\S' 
False 
PS C:\>'Apples: ' -match ':\s*\S' 
False 
PS C:\>'Apples: ' -match ':\s*\S' 
False 
PS C:\>'Apples: are a fruit' -match ':\s*\S' 
True 
PS C:\>'Apples:x' -match ':\s*\S' 
True 

Wenn Sie den Rest der Zeile extrahieren können, möchten Sie vielleicht für die Verankerung der Partie nach einem Doppelpunkt durch eine beliebige Anzahl von Leerzeichen ((?<=:\s*)\S.*) folowed eine Behauptung Lookbehind verwenden.

 
PS C:\>'Apples:' -match '(?<=:\s*)\S.*' 
False 
PS C:\>'Apples: ' -match '(?<=:\s*)\S.*' 
False 
PS C:\>'Apples: ' -match '(?<=:\s*)\S.*' 
False 
PS C:\>'Apples: are a fruit' -match '(?<=:\s*)\S.*' 
True 
PS C:\>$matches[0] 
are a fruit 
PS C:\>'Apples:x' -match '(?<=:\s*)\S.*' 
True 
PS C:\>$matches[0] 
x 
+0

Thx Ansgar, aber dann diese doesn 't match '' Äpfel: a 'match'^Äpfel: \ S''. Es ist also nicht notwendig, direkt danach einen Platz zu haben, aber es kann da sein. – DarkLite1

+1

@ DarkLite1 Sie sollten das in Ihren Beispielen klar gemacht haben. Siehe aktualisierte Antwort. –

5

Ich denke, das sollte funktionieren:

'^Apples:\s*\S+\s*' 

Das Match wird, wenn es eine oder mehr Nicht-Leerzeichen finden „Apple:“, das Leerzeichen kann oder auch nicht hat am Anfang oder Ende.

+0

Das ist perfekt! Kannst du erklären, was '\ S +' bedeutet? – DarkLite1

+0

@ DarkLite1 '\ S' ist kein Leerzeichen. '+' ist eine oder mehrere – BenH

-1

Wenn benötigen Sie etwas allgemeinere Lösung (nicht nur Äpfel), versuchen, etwas wie folgt aus:

/^[A-Z]+: *\K\w.*/gmi 

Wie es funktioniert:

  • ^[A-Z]+: - Beginn einer Linie (Hinweis m Schalter), eine Folge von Buchstaben (Groß - oder Kleinschreibung - Hinweis i Schalter).
  • * - Es kann einige Leerzeichen geben.
  • \K - Keep - "vergessen", was Sie bis jetzt abgestimmt haben, setzen Sie den Startpunkt des Spiels hier.
  • \w.* - Ein Wort char und möglicherweise eine beliebige Anzahl von Zeichen.
  • g Switch - um Ergebnisse aus allen Quellzeilen zu erfassen.

Der Text tatsächlich abgestimmt ist nur was nach \ K war.

+0

'\ K' ist nicht in PowerShell (.Net) regex Dialekt verfügbar. – TessellatingHeckler

0

Wenn Sie möchten, um tatsächlich den Wert der Äpfel im Spiel zu erfassen, diese Regex funktioniert:

^Apples:\s*(.*\S.*)\s*

es den Wert in Übereinstimmung Gruppe fängt 1.

Verwandte Themen