正则表达式中有变量时如何精确匹配字符串

时间:2019-07-14 10:12:10

标签: python-3.6

我正在尝试使用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()查找namephno的副本

ph_dir.txt已经在下面的条目

abcd:12345

现在,如果我以abc123的形式输入,则表示已经存在。

操作不当:

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。我正在使用相同的功能来查找电话号码的重复项。所以我不能在这里硬编码任何值。如何解决这个问题?

1 个答案:

答案 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

您还可以在一个正则表达式匹配项中同时检查namephno

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