匹配零或更多匹配的字符串正则表达式

时间:2018-01-09 10:57:29

标签: python regex

我正在尝试匹配某些模式,请参考此online tool以便于测试

pattern = r"(^/\w+)\s*?(\w+)"
string_1 = "/path_one path_two"
string_2 = "/path_one_only"

虽然string_1通过返回两个部分按预期匹配,但对于string_2,它会剪切第一部分的最后一个字符。但我希望模式总是返回两个部分,如果路径2不存在则返回None / empty string

3 个答案:

答案 0 :(得分:1)

使用此模式:

pattern = r"(^/\w+)\s*(\w*)"

现在第二个字符串将完全匹配第一个捕获组。

在这里可以看到最后一个字符被剪裁在第二个字符串中的原因:

(^/\w+)  - matches 'path_one_onl'
\s*?     - matches nothing (there are no spaces)
(\w+)    - matches 'y'

换句话说,第二个捕获组强制要求在那里至少匹配一个字符。

答案 1 :(得分:1)

将您的模式字符串更改为

  1. 或者

    pattern = r"(^/\w+)\s*(\w+)?"
    
  2. pattern = r"(^/\w+)\s*(\w*)"
    
  3. 您不需要\s*?,只需\s*即可。

答案 2 :(得分:0)

您还可以通过在其周围添加非捕获组来使整个第二部分(包含空格)可选:

r"(^/\w+)(?:\s+(\w+))?"