重新搜索多行Python

2024-04-27 21:59:00 发布

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

用“\s”或“\n”搜索时找不到我要搜索的多行。

来源部分:

Date/Time:
2013-08-27 17:05:36 

----- BEGIN SEARCH -----

GENERAL DATA:
NAME:   AB12
SECTOR: 
999,999
CONTROLLED BY:  Player
ALLIANCE:   Aliance
ONLINE: 1 seconds ago
SIZE:   Large
HOMEWORLD:  NO
APPROVAL RATING:    100%
PRODUCTION RATE:    100%

RESOURCE DATA:
POWER:  0 / 0
BUILDINGS:  0 / 20
ORE:    80,000 / 80,000
CRYSTAL:    80,000 / 80,000
POPULATION: 40,000 / 40,000

BUILDING DATA:
N/A

UNIT DATA:
WYVERN(S):  100

----- END SEARCH -----

在记事本中查看它++我看到“构建数据:(LF)”

完整代码

lines = open('scan.txt','r').readlines()
for a in lines:
    if re.search(r"\A\d", a):
        digits = a
        if re.search(r"2013", digits):
            date.append(digits[:19])
            count +=1
        elif re.search(r",", digits):
            clean = digits.rstrip()
            sector = clean.split(',')
            x.append(sector[0])
            y.append(sector[1])
    elif re.search(r"CONTROLLED BY:", a):
        player.append(a[15:].rstrip())
    elif re.search(r"ALLIANCE:", a):
        alliance.append(a[10:].rstrip())
    elif re.search(r"SIZE:", a):
        size.append(a[6:].rstrip())
    elif re.findall('BUILDING DATA:\sN/A', a, re.M):
        def_grid = ''
        print "Didn't find it"
        defense.append(def_grid)
        defense_count +=1
    elif re.search(r"DEFENSE GRID", a):
        def_grid = a[16:].rstrip()
        print "defense found"
        defense_count +=1

但我什么也没有回来。

当“构建数据”之后不存在“防御网格”时,我需要插入一个空间隔符:

我知道我漏掉了一些东西,我试着阅读了关于re.search的文章,但是我找不到任何详细的例子来解释多行是如何工作的。


Tags: researchdatabydefcountgridsector
3条回答

你可以做你所做的,但是使用re.findall而不是re.search

re.findall('BUILDING DATA:\nN/A', a, re.M)
#['BUILDING DATA:\nN/A']

编辑:

问题是你正在逐行阅读。为了检测属于两行或多行的模式,您必须将字符串视为一个整体,可能要执行以下操作:

s = ''.join(lines)

如果lines不是那么大,然后使用s执行多行搜索,这是可以的。。。

我想知道你为什么什么也没有回来。如果您的文件如下所示:

BUILDING DATA:
N/A

我开始使用

import re
f = open('test.txt','r')
a = f.read(20)
re.search('BUILDING DATA:\nN/A', a, re.M)

输出。这是

<_sre.SRE_Match object at 0x1004fc8b8>

如果我使用字符串测试re.search,则该字符串不在如下代码所示的文件中:

import re
f = open('test.txt','r')
a = f.read(20)
re.search('BUILDING BATA:\nN/A', a, re.M)

没有预期的产出。

编辑:

正如索洛·卡斯特罗指出的,问题在于逐行阅读。为什么不用这样的东西呢?

a = open('scan.txt','r').read()
if re.findall('BUILDING DATA:\nN/A', a, re.M):
     print('found!')

第三次尝试:

tmp = False
...
elif re.findall('BUILDING DATA:', a, re.M):
    tmp = True
elif tmp and re.findall('N/A', a, re.M):
    def_grid = ''
    print "Didn't find it"
    defense.append(def_grid)
    defense_count +=1
re.findall("BUILDING DATA:\nN/A",a,re.MULTILINE)

相关问题 更多 >