Python 获取文本文件中第一个匹配项的正则表达式

Python 获取文本文件中第一个匹配项的正则表达式,python,python-3.x,regex,Python,Python 3.x,Regex,我在里面有一个文本文件,它是: "000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|" 现在我尝试使用正则表达式来获取“|ROOT”之前的第一个数字块,该数字是00000002 我尝试使用: with open(file, 'r', encoding='utf-8', errors='ignore') as f: lines = f.read() x

我在里面有一个文本文件,它是:

"000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|"
现在我尝试使用正则表达式来获取“|ROOT”之前的第一个数字块,该数字是00000002

我尝试使用:

with open(file, 'r', encoding='utf-8', errors='ignore') as f:
    lines = f.read()  
    x = re.findall("^\s*[0-9].(ROOT$)", lines)[0]

print(x)

而且它不起作用。我的策略是让字符串以number开头,以ROOT结尾,并获得第一个匹配项。

查看以下代码:

import re
# 000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|

file = './file.txt'
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
    lines = f.read()  
    x = re.findall(r"(\d*[0-9])\|ROOT", lines)
    print(x)
    x = re.findall(r"(\d*[0-9])\|ROOT", lines)[0]
    print(x)
['000000002', '000000003', '000000004']
000000002
输出:

import re
# 000000002|ROOT |237277309|000000003|ROOT |337277309|000000004|ROOT |437277309|

file = './file.txt'
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
    lines = f.read()  
    x = re.findall(r"(\d*[0-9])\|ROOT", lines)
    print(x)
    x = re.findall(r"(\d*[0-9])\|ROOT", lines)[0]
    print(x)
['000000002', '000000003', '000000004']
000000002

ROOT$
要求在行尾附近有四个字符
ROOT
findall
返回所有匹配项;如果您只关心第一个,可能只需使用
match
search

打开(文件'r',编码='utf-8',错误='ignore')为f:
对于f中的行:
m=重新匹配(r'(\d+)\ |根',行)
如果m:
印刷品(m.group(1))
打破
中断
导致循环在找到第一个匹配项后立即终止。我们一次读一行,直到找到一个匹配的,然后终止。(这还可以通过避免不必要地读取我们不关心的行,以及避免一次将多行读取到内存中,从而优化程序。)正则表达式中的括号会将其中的匹配捕获到
组(1)