首页 > 解决方案 > 尝试通过正则表达式打印带有字母、特殊和数字字符的行

问题描述

我正在尝试确定使用 python 在文件中搜索字符串的最佳方法,例如:

BusID = 9876

当然 9876 可以是任何 4 位字符串,例如 1234、5678、9999 等。并且BusID应该始终是该行的一部分。

sample_file_with_digits.txt用于演示的文件如下所示:

12
123
1234
2345 foo 
BusID = 3456 
foo BusID = 9876

我知道在 bash 或 powershell 中,我可以使用这个正则表达式来查找文件中的任何 4 位数字(如果包含在空格中),其正则表达式如下(?<!\S)[0-9]{4}(?!\S)

但我必须确保我找到的任何 4 位数字都与 BusID 在同一行。我正在努力弄清楚如何用 python 来解决这个问题:

我在 Jupyter 笔记本中打开了一个文件并添加了以下单元格,并且可以读取该文件:

import re
myfile = open("C:\\Users\\frank\\Documents\\sample_file_with_digits.txt")
myfile1.read()

我一直在尝试确定如何使用re.findallre.compile打印此文件中的行,如下所示:

BusID = 3456 
foo BusID = 9876

标签: pythonregex

解决方案


您可以先编译正则表达式语句,然后使用它search来查找字符串。

import re

with open('sample.txt') as f:
    pat = re.compile('BusID = [0-9]{4}(?![0-9])')
    for line in f:
        if(pat.search(line) is not None):
            print(line.strip())

编辑:正如@Wiktor Stribiżew 建议的那样,向正则表达式添加了一个负前瞻


推荐阅读