匹配所有期望特定字符串

时间:2015-07-29 14:28:51

标签: python regex python-2.7

我正在使用Python 2.7并且对正则表达式有疑问。我的字符串就是这样......

"SecurityGroup:Pub HDP SG" 
"SecurityGroup:Group-Name" 
"SecurityGroup:TestName"

我的正则表达式如下所示

[^S^e^c^r^i^t^y^G^r^o^u^p^:].*

以上似乎有效,但我觉得它不是很有效,而且如果字符串有单词" group"在其中,那也会失败......

我正在寻找的是输出应该在冒号后找到任何东西(:)。我还以为我可以做类似于使用第2组作为我的匹配...但问题是,如果名称中有空格,那么我将无法获得正确的名称。

(SecurityGroup):(\w{1,})

3 个答案:

答案 0 :(得分:3)

为什么不做呢

security_string.split(':')[1]

要在冒号后抓取字符串的第二部分吗?

答案 1 :(得分:2)

您可以使用lookbehind

pattern = re.compile(r"(?<=SecurityGroup:)(.*)")
matches = re.findall(pattern, your_string)

打破它:

  (?<=  # positive lookbehind. Matches things preceded by the following group
    SecurityGroup:  # pattern you want your matches preceded by
  )  # end positive lookbehind
  (  # start matching group
    .*  # any number of characters
  )  # end matching group

在字符串"something something SecurityGroup:stuff and stuff"上测试时,它会返回matches = ['stuff and stuff']

修改

如评论中所述,pattern = re.compile(r"SecurityGroup:(.*)")完成同样的事情。在这种情况下,您匹配字符串"SecurityGroup:"后跟任何内容,但只返回后面的内容。这可能比我使用lookbehind的原始示例更清晰。

答案 2 :(得分:2)

也许这个:

([^:"]+[^\s](?="))

Regex live here.