匹配图案并打印下一个lin

2024-10-01 13:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含某些规则的文本文件。下面是它的格式:

:SchoolName (rule_1)
)
:xyz (true)
:abc_efg (
    : xxyyzz-x1y1-z1z2-z3z4
)
  1. 我想匹配“:abc_efg”并在匹配后获取行,即。 “:xxyyzz-x1y1-z1z2-z3z4”
  2. 每次有新文件时,它都会查找“:abc_efg”,并在匹配后获得相应的行

到目前为止我已经试过了

^{pr2}$

打印列表1显示

[':abc_efg (\n\t\t\t', ': xxyyzz-x1y1-z1z2-z3z4 \n\t\t)\n\t\t']

Tags: 文件true规则格式ruleabc文本文件xyz
2条回答

使用f.readline()逐行读取文件。在

当有比赛时,很容易得到下一行。在

with open('abc.txt') as f:
    a = ' '
    while(a):
        a = f.readline()
        l = a.find(':abc_efg') #Gives a non-negative value when there is a match
        if ( l >= 0 ):
            print f.readline()

使用以下regex,首先它是高效的,其次,str方法如果用于繁重的解析,就会失去控制。在

import re
pat = re.compile(r":(?P<x>.+?)\s\(\s+:\s(?P<y>.+?)\s\)")
with open(somefile) as fr:
    match = pat.search(fr.read())
    print(match.groupdict())


Out[111]: {'x': 'abc_efg', 'y': 'xxyyzz-x1y1-z1z2-z3z4'}

将正则表达式分成多行以清楚地看到它。在

相关问题 更多 >