python - 尝试通过正则表达式打印带有字母、特殊和数字字符的行
问题描述
我正在尝试确定使用 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.findall
或re.compile
打印此文件中的行,如下所示:
BusID = 3456
foo BusID = 9876
解决方案
您可以先编译正则表达式语句,然后使用它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 建议的那样,向正则表达式添加了一个负前瞻
推荐阅读
- python - 在一个 plot() 中绘制多条线时,Pyplot 返回不同的对象
- regex - 使用记事本++上的正则表达式提取以不同值重复的标签
- javascript - 追加限制为 1 时更新变量的值
- php - PHP - 对不同的数组求和
- tomcat - intellij 的 gwh 问题:无法反序列化响应
- c++ - 有没有办法在条件语句中声明对象?
- r - 多列时间序列分析
- angular - 如果我决定在没有 ngx-leaflet 库的情况下在 Angular 中使用传单,我需要照顾自己什么?
- python - 如何比较两个列表的效率
- html - Recharts - 将 dataKey 的值传递给子组件