Python:在Fi中匹配多个模式

2024-10-01 07:33:45 发布

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

我想从文件中提取一些信息。你知道吗

文件:

ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34  CONTENT ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34  CONTENT

CONTENT
CONTENT
CONTENTCONTENTCONTENT CONTENTCONTENT
CONTENTCONTENTCONTENTCONTENTCONTENT
CONTENTCONTENTCONTENTCONTENTCONTENT

我想在这个文件中执行多个模式,但当我提取第一个信息时,其余的(文件)都是空的。你知道吗

import re
import pdb

w = open("extractfile.txt","r")

print w.read()
print re.findall(r'CONTENT', w.read())
print re.findall(r'\w{3} \d{2}-\d{2}-\d{2}', w.read())

输出:

ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34  CONTENT ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34 ASD 23-02-34  CONTENT

CONTENT
CONTENT
CONTENTCONTENTCONTENT CONTENTCONTENT
CONTENTCONTENTCONTENTCONTENTCONTENT
CONTENTCONTENTCONTENTCONTENTCONTENT



[]
[]

如果我改变打印顺序,它总是显示第一个打印,其余的都是空的。。。另一件事,我认为是多个模式在一行,通过使用组,但我不知道它是否会工作


Tags: 文件importre信息read模式opencontent
1条回答
网友
1楼 · 发布于 2024-10-01 07:33:45
>>>> import re
>>>> with open('extractfile.txt', 'r') as txt:
....     file = txt.read()

>>>> match = re.findall(r'CONTENT', file)
>>>> content
['CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT', 'CONTENT']

>>>> pattern = re.findall(r'(?P<asd>[\w]+ )(?P<dgt>[\d-]+)', file)
>>>> pattern
[('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34'), ('ASD ', '23-02-34')]

whitespace after [\w]+也可以通过将其移出<asd>组而排除在外,但是由于regex最终执行了更多的步骤,因此速度较慢。你知道吗

re.findall(r'(?P<asd>[\w]+) (?P<dgt>[\d-]+)', file)

相关问题 更多 >