如何使 re.finditer 只返回每行一次
Posted
技术标签:
【中文标题】如何使 re.finditer 只返回每行一次【英文标题】:How do I make re.finditer only return each line once 【发布时间】:2022-01-13 17:36:26 【问题描述】:我正在搜索一个文本文件,它是一个“phoneBook”的作业,并且正在使用正则表达式查找器,但如果一个名称中有两次字母 a,它会打印该行两次,这是我试图避免的。还有没有办法让它忽略大小写?
def searchPhonebook(s): #This will search the phonebook(s) for the inputed data that is assigned to d
print()
d=input("Please enter the Name, Character, Phone Number, or a number: ") #Variable d which is the inputted data
print()
import re
pattern = re.compile(d)
for line in open("phone.txt"):
for match in re.finditer(pattern,line):
print(line)
所以当我搜索“a”时它会返回
Jack Hammer,277-4829
Jack Hammer,277-4829
Mike Rafone,345-3453
Earl Lee Riser,701-304-8293
所以我希望它每一个都返回一次,并且像 Abby 一样找到 'a' 的大写
【问题讨论】:
使用re.search
,而不是re.findall
。
这会产生“对象不可迭代”的错误
【参考方案1】:
不要使用findall()
。只需测试该行是否与模式匹配:
for line in open("phone.txt"):
if re.search(pattern, line):
print(line)
实际上,我完全不确定您为什么要使用 re
。您的用户是否真的输入了正则表达式模式?如果他们只是输入纯字符串,请使用if d in line:
【讨论】:
谢谢,就像我说的我还是个学生,有没有办法让它忽略大小写,所以它会返回像 Abby 这样的结果?if d.lower() in line.lower():
谢谢,这对我帮助很大,我之前尝试过但没有成功(可能是我在列表中打开了文件),再次谢谢,我会标记一次正确能以上是关于如何使 re.finditer 只返回每行一次的主要内容,如果未能解决你的问题,请参考以下文章
是否有 Python 的 re.findall/re.finditer(迭代正则表达式结果)的 Perl 等价物?
Python3正则匹配re.split,re.finditer及re.findall函数用法详解