python采用基于regex模式的精确字符串

2024-04-19 08:09:45 发布

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

我在下面的模板中有示例数据

'Q31 P2852 Q25648793',
'Q31 P2852 Q25648794',
'Q31 P3916 concept893',
'Q31 P2633 Q1115035',
'Q31 P298 BEL',
'Q31 P1448 Belgick\u00E',
'Q31 P1448 K\u00F6nigreic',

结果应该是这样的

'Q31 P2852 Q25648793',
'Q31 P2852 Q25648794',
'Q31 P2633 Q1115035'

所以,我只需要用这种格式的数据

format = Q[number] P[number] Q[number]

或者用正则表达式

pattern = r'Q[0-9]*\sP[0-9]*\sQ[0-9]*'

我已经尝试了一个字符串,它的工作,但当我申请在txt文件,它没有工作

data ='./sample/tes'

with open(data) as infile:
    for line in infile:
        if line.startswith('Q'):

            if re.match(r'Q[0-9]*\sP[0-9]*\sQ[0-9]*', line):
                print(line)

            else:
                print('not ok')

        else:
            pass

编辑 我试图使用re.compilere.findallre.fullmatch但它只读取第一行。我知道为什么。而且,它并不真正理解我应该使用哪个re

我仍然在学习正则表达式,我无法解决上述问题。如有任何建议,将不胜感激。顺便说一句,真正的文件是1.5 TB

非常感谢


Tags: 文件数据renumberdatalinesqsp
1条回答
网友
1楼 · 发布于 2024-04-19 08:09:45

我认为你也应该做一个:

for line in infile.readlines():

以及@RomanPerekhrest在评论中提出的建议

re.match(r"Q[0-9]*\sP[0-9]*\sQ[0-9]*"

相关问题 更多 >