我正在尝试使用python3创建电话簿程序。如果电话簿中已经存在给定的名称/电话号码,我需要通知用户提供唯一的名称/电话号码。下面是我的代码
import re,os
take_input='yes'
def duplicate_exists(arg):
if os.path.exists('ph_dir.txt'):
with open('ph_dir.txt','r') as rp:
contents=rp.read()
res=re.findall(arg,contents)
if res:
print(f"{arg} already exist.")
tk_ip='yes'
else:
tk_ip='no'
return tk_ip
while take_input == 'yes':
name=input("Enter the name:")
phno=input("Enter phone number:")
name=name.strip()
phno=phno.strip()
take_input=duplicate_exists(name)
take_input=duplicate_exists(phno)
with open('ph_dir.txt','a') as wp:
contents=wp.write(f'\n{name}:{phno}')
在上面的代码中,我使用duplicate_exists()
查找name
和phno
的副本
ph_dir.txt
已经在下面的条目
abcd:12345
现在,如果我以abc
和123
的形式输入,则表示已经存在。
操作不当:
Enter the name:abc
Enter phone number:123
abc already exist.
123 already exist.
Enter the name:
我在正则表达式中尝试过单词边界res=re.findall(\barg\b,contents)
。但这会产生语法错误SyntaxError: unexpected character after line continuation character
。我正在使用相同的功能来查找电话号码的重复项。所以我不能在这里硬编码任何值。如何解决这个问题?
答案 0 :(得分:0)
使用此正则表达式:re.findall(f'{arg}:.*|.*:{arg}', name)
def duplicate_exists(arg):
if os.path.exists('ph_dir.txt'):
with open('ph_dir.txt','r') as rp:
contents=rp.read()
res=re.findall(f'{arg}:.*|.*:{arg}', contents)
if res:
print(f"{arg} already exist.")
tk_ip='yes'
else:
tk_ip='no'
return tk_ip
您还可以在一个正则表达式匹配项中同时检查name
和phno
:
def duplicate_exists(name, phno):
if os.path.exists('ph_dir.txt'):
with open('ph_dir.txt','r') as rp:
contents=rp.read()
res=re.findall(f'{name}:.*|.*:{phno}', contents)
if res:
print(f"{name} or {phno} already exist.")
tk_ip='yes'
else:
tk_ip='no'
return tk_ip