将python lookahead断言正则表达式转换为有效的Golang

时间:2017-03-24 02:36:04

标签: python regex go

我有以下正则表达式在Python中运行良好(由于前瞻性断言)。

some_list = re.findall('^(?=Name:)(.*?)(?=USB\ Device\ Filters:)', myinput, re.MULTILINE|re.DOTALL)

请参阅下面代码块中的myinput示例。

名称:将始终是组的开头, USB设备过滤器:将始终是组的结尾。并非所有行都有一个有效的键:值,例如,可以有一个或一个空行。

Name:            Server1 10.0.0.11
Groups:          /
Guest OS:        Ubuntu (64-bit)
\n
<none>
USB Device Filters:

Name:            Server2 10.0.0.12
Groups:          /
Guest OS:        Debian (64-bit)
\n
<none>
USB Device Filters:

任何人都可以帮我将其转换为有效的 Golang 正则表达式吗?

最终目标是解析myinput并获得一些匹配的组。

1 个答案:

答案 0 :(得分:2)

在Python中给出了这个:

^(?=Name:)(.*?)(?=USB Device Filters:)

Demo

由于^(?=Name:)是零宽度断言,Name:由其后的捕获组捕获。

你可以用以下方法在Golang中捕获它:

^(Name:.*?)USB Device Filters:

Demo

如果你不想捕获Name:\s,你可以这样做:

^Name:\s*(.*?)USB Device Filters:

Demo

您无需使用任何一种语言(?=USB\ Device\ Filters:)来转义空格。所有都设置了(?ms)个标志。