Python - 在一行中匹配一个字的一部分,并采取多个行直到行尾

问题描述:

我目前有一个配置文件,其中有以“ltm AZ2b”开头的单词,然后是几行配置,然后最后接着VS-索引作为行的末尾Python - 在一行中匹配一个字的一部分,并采取多个行直到行尾

下面是一个例子:


LTM虚拟YNC-PROD-环境 - VS { ..... 。 ... } .. 。根据本 VS指数56

--right是另一个配置集:

LTM虚拟YNC-PROD-环境 - VS-AZ2b { ..... ... .. } ... VS指数45


正如你可以看到上面(高亮为好),还有多套配置的,并且每一组开始机智h,-VS(在此配置下有多行)以及另一组具有相同名称但具有AZ2b的配置,如:-VS-AZ2b(此配置下还有多行配置)

我正在尝试仅提取以-VS-AZ2b开头并以其vs指数结束的配置集。

我写了下面的代码,但它不工作得非常好:


进口重新

fhandle =开放( 'C:/ Python程序/ Active.txt',“R ') STR = fhandle.read()

Y = re.findall('^+ AZ2b。+?VS-指数[0-9]。',STR,re.DOTALL)

为在y行: line = line.r E放置( '\ n', “\ n”) 打印线


,我得到的是一切的输出 - 包括-VS设置的配置。不知道为什么。有人可以帮忙吗?

只是为了检查,我拿了一个文件,只添加了配置集-VS和程序没有返回任何东西。所以我想代码只是部分正确的。

谢谢!

其实我找到了它。我必须这样修改正则表达式:

y = re.findall('^。+ AZ2b [\ s \ S] *?。+ vs-index [0-9]。\ n}',str, re.MULTILINE)

[\ s \ S] *?在正则表达式中失踪了。我从这里得到这个信息在stackflow:

又re.DOTALL不是很好,因为它匹配的一切,所以我不得不使用re。MULTILINE代替

Can I match multiline string in python without using re.DOTALL?

谢谢大家!