我有以下正则表达式(来自此链接:get python dictionary from string containing key value pairs)
r"\b(\w+)\s*:\s*([^:]*)(?=\s+\w+\s*:|$)"
以下是解释:
\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
我的问题是,当我的字符串中带有" - "介于两者之间,例如:movie-night
,上述正则表达式无效,我认为这是由于b(\w+)
。如何更改此正则表达式以使用包括" - "?在内的单词?我试过了b(\w+-)
但它不起作用。感谢您的帮助。
答案 0 :(得分:1)
你可以尝试这样的事情:
r"\b([\w\-]+)\s*:\s*([^:]*)(?=\s+\w+\s*:|$)"
注意[\w\-]+
,它允许匹配单词字符和破折号。
为了将来的可读性,您可能还需要调查re.X/re.VERBOSE
,这可以使正则表达式更具可读性。