2016-08-23 2 views
1

ich auf einem Java-Programm gerade arbeite und ich brauche Hilfe, um diese Muster zu erstellen:Ignorieren withspaces und Kommentare mit RegexMuster in Java

I\sam\s(.+) 

Ich möchte alle Leerzeichen nach der ersten Gruppe ignorieren, für Beispiel wenn der Name "George P" ist, sollte nur der "George P" gezählt werden. Auch ich wollte das Kommentarzeichen * betrachten und ignoriere alle Zeichen danach. Wenn es kein * gibt und viele Leerzeichen gefunden werden, sollte der Matcher ausfallen.

+0

@LambdaNinja Ich möchte o überlegen, was kommt nach dem "Ich bin", aber Zeichen nach dem coment (*) whould ignoriert. Wie "Ich bin George * W", sollte das "W" ignoriert werden, sowie wenn der Name mit Leerzeichen endet, wie "Ich bin George" (hat viele Leerzeichen nach George), sollte nur als "George" mit Nein gezählt werden Räume. – rJqnr

+0

Am Mend habe ich diese Regex '(I \ sam \ s (\ S +)) | (Ich \ sam \ s. + (?: \ *. +))' – rJqnr

Antwort

2

update2
RE: DC regex, pro Kommentar.

^\s*(DC\s)((\d+)(\.)?(\d+)?)(?=\s*(?:\*|$))

^       # BOS 
\s*       # Optional whitespace's 

(DC \s)      # (1), DC + single whitespace 
(       # (2 start) 
     (\d+)      # (3), 1 or more Digits 
     (\.)?      # (4), Optional dot . 
     (\d+)?      # (5), Optional 0 or more Digits 
)        # (2 end) 

(?=       # Lookahead qualifier Assertion 
     \s*       # Optional whitespace's 
     (?:       # --------------------- 
      \*       # Asterisk (comment) 
     |        # or, 
      $        # End of string 
    )        # --------------------- 
) 

Update
Das Sternchen in Gruppe enthalten NICHT 1:

I\sam\s([^*]*)(?:(?<!\s)|(?<=I\sam\s))

erklärt

I \s am \s     # 'I am ' 

([^*]*)      # (1), Capture after that, but not asterisk or after 

(?:       # Trimming 
     (?<! \s)      # Trim, no wsp behind 
    |        # or, 
     (?<= I \s am \s)    # Just 'I am ' behind 
) 

Der Stern IS 1 in Gruppe enthalten:

I\sam\s([^*]*\*?)(?:(?<!\s)|(?<=I\sam\s))

(Hinweis -Trimming Bedingungen diese regex komplexer machen. Es ist besser, nicht innerhalb der Regex zu trimmen, sondern mit Sprach-APIs den Inhalt von Capture 1 nach dem Match zu trimmen.)

erklärt

I \s am \s     # 'I am ' 

([^*]* \*?)    # (1), Capture after that, but not after asterisk 

(?:       # Trimming 
     (?<! \s)     # Trim, no wsp behind 
    |       # or, 
     (?<= I \s am \s)   # Just 'I am ' behind 
) 
+0

Vielen Dank, es gibt nur ein kleines Problem, Ich arbeite bereits daran. Wenn ich "Ich bin George * A" schreibe, gibt Gruppe 1 "George *" zurück. – rJqnr

+0

Ein Update hinzugefügt, um das Sternchen selbst auszuschließen. – sln

+0

einfach perfekt, funktioniert für alle möglichen Fälle. Vielen Dank für Ihre Zeit. – rJqnr

0

Verwenden Sie die folgende regex:

"I\\sam\\s[a-zA-Z]+\\s+[a-zA-Z]+"

Ihr Problem könnte sein, dass Sie die Escape-Zeichen entkommen müssen, als \sPattern Sonderzeichen ist. Nicht Java's. Dies wird übereinstimmen:

I am George P 
I am Tom  D 
I am sdawawe x 

Wird nicht passen:

I am George P 
I am Geor s 

Ist es das, was Sie wollten?