2016-08-02 15 views
1

ich die unten regex habe (von diesem Link: get python dictionary from string containing key value pairs)Regex find Wort wie "-"

r"\b(\w+)\s*:\s*([^:]*)(?=\s+\w+\s*:|$)" 

ist hier die Erklärung:

\b   # Start at a word boundary 
(\w+)  # Match and capture a single word (1+ alnum characters) 
\s*:\s*  # Match a colon, optionally surrounded by whitespace 
([^:]*)  # Match any number of non-colon characters 
(?=   # Make sure that we stop when the following can be matched: 
\s+\w+\s*: # the next dictionary key 
|   # or 
$   # the end of the string 
)   # End of lookahead 

Meine Frage, dass, wenn mein String hat die Wort mit dem "-" dazwischen, zum Beispiel: movie-night, funktioniert der obige Regex nicht und ich denke, es ist wegen der b(\w+). Wie kann ich diesen Regex ändern, um mit einem Wort einschließlich "-" zu arbeiten? Ich habe versucht b(\w+-), aber es funktioniert nicht. Danke im Vorraus für deine Hilfe.

+1

Sie können versuchen, 'b ([\ w -] +)'. – shantanoo

+0

Wo ist der Doppelpunkt in Ihrem Beispiel? Deine Regex scheint einen zu brauchen, oder? –

Antwort

1

Man könnte so etwas wie dies versuchen:

r"\b([\w\-]+)\s*:\s*([^:]*)(?=\s+\w+\s*:|$)" 

Notiere die [\w\-]+, die sowohl ein Wortzeichen und einen Strich ermöglicht entsprechen.

Für die Lesbarkeit in der Zukunft, möchten Sie vielleicht auch untersuchen , die Regex lesbarer machen kann.

+2

Am besten, um den Bindestrich im Falle zukünftiger Ergänzungen zu umgehen: '' '[\ w \ -] +' '' – Owen

+0

Danke Elizafox & Owen. Es funktioniert wie erwartet! – Leo