python中的正则表达式帮助

python中的正则表达式帮助,python,regex,Python,Regex,我试图解析大约一百行的输出。此输出的格式如下所示: <random text> STATION "STATION_NAME_ONE": <random text> <random text> IP Address: 0.0.0.0 <random text> <SEVERAL LINES OF RANDOM TEXT> <random text> STATION "STATION_NAME_TWO": <random

我试图解析大约一百行的输出。此输出的格式如下所示:

<random text> STATION "STATION_NAME_ONE": <random text>
<random text> IP Address: 0.0.0.0 <random text>
<SEVERAL LINES OF RANDOM TEXT>

<random text> STATION "STATION_NAME_TWO": <random text>
<random text> IP Address: 1.1.1.1 <random text>
<SEVERAL LINES OF RANDOM TEXT>

... and so on
我知道我要找的电台的IP地址。使用IP地址,我试图构造一个正则表达式来查找站点名称。电台名称可以是任意长度,并且可以包含任意数量的数字/字母/下划线。电台名称的前面总是电台,后面总是冒号。IP地址将始终位于站点名称之后的行上,并且始终在IP地址之前:

注意:有几个站点具有不同的站点名称和IP地址。“随机文本”可以是任意长度,并包含任意符号/数字/字母

到目前为止,我的尝试是:

re.search('(?<=STATION ).*?(?=:.*IP Address: %s)' % sta_ip, output, re.DOTALL)
但很明显,每次都会返回几乎第一个电台名称

如何生成可以搜索指定站点名称的正则表达式?这可能吗

STATION\s*"(.*?)":\s*.*?(?:\r|\n)<.*?>\s*IP Address:\s*IPHERE\s*<
将IPHERE替换为IP地址,若要获取站点名称,请提取第一个匹配的组。

请尝试/station\s*?*?*?。\s*?:*?IP地址:\s*?%s/ 诀窍是不要贪心匹配。匹配此正则表达式后,您想要的名称将出现在第一个捕获中。

Edit 我知道了。关键是站名和IP仅由一条换行线分隔,因此我们可以硬编码该换行线

re.search('STATION(?P<StationName>.*?):.*?\n.*?IP Address: %s' % sta_ip, output).group("StationName")

不幸的是,无论ip如何,它仍然返回第一个站名。当然:很高兴能帮助您。HMMM,我无法将其用于返回组。我无法将其用于返回组。示例:正则表达式起作用,因此您必须尝试获取组。请确保您使用的是正确的正则表达式函数Quick question,引号的作用是什么?它们是一个占位符,因此正则表达式不会将它们捕获为站点名称的一部分。。。因此,您将获得StationName而不是StationName