如何捕获多个可选组

时间:2015-12-09 12:48:06

标签: python regex

这是我的字符串:

  

2015-12-07T14:05:14 + 02:00 1.1.1.1< 13> 1 2015-12-07T14:05:13 + 02:00   my_server - - - - 2.2.2.2

我正在尝试捕获“1.1.1.1”,“my_server”和“2.2.2.2”。但是我需要“1.1.1.1”和“my_server”部分应该是可选的。我写了一些正则表达式,当我的测试字符串如上所示时它确实匹配所有内容。但是当我的测试字符串是这样时它不匹配:

  

2.2.2.2

所以这是我的正则表达式:

(?:(?P<server_ip>[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}).*?(?:(?P<server_name>\S*?)
- - - - )).*?(?P<remote_ip>[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})

我正在测试正则表达式here。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您可以通过在右括号后添加(someregex)? 来使任何捕获组可选(更精确:匹配零次或一次)。 E.g。

{{1}}

为您应该捕获的群组执行此操作&#34; 1.1.1.1&#34;和&#34; my_server&#34;。