所以我得到了:
def CheckUserExists(user):
with open("C:/~/database.txt", 'r') as file:
if re.search(user, file.read()):
return True
else:
return False
username = input("Please enter you Username: ")
if CheckUserExists(username) == True:
print("You exist!")
else:
print("This user does not exist...")
但是,如果您输入例如字母' a'并且是一个叫做“大脑”的用户。搜索选择a并返回True。如何搜索整个单词?
我看过这里:How to check in Python if string is in a text file and print the line?但是我不理解这段代码:
re.search("\b{0}\b".format(w),line)
答案 0 :(得分:3)
正则表达式\b
,refers to the empty string at a word boundary,其中单词为\w+
或[A-Za-z0-9_]+
如果每行有一个名称(名称周围没有其他空格),您可以使用^{0}$
或re.M
标记{/ 1}按行搜索1>
看起来像这样:
re.MULTILINE
虽然评论和答案表明,如果你这样做
def CheckUserExists(user):
with open("C:/~/database.txt", 'r') as file:
if re.search('^{0}$'.format(re.escape(user)), file.read(), flags=re.M):
return True
else:
return False
username = input("Please enter you Username: ")
if CheckUserExists(username): # it's redundant to check if == True here
print("You exist!")
else:
print("This user does not exist...")
你可能有误报。
答案 1 :(得分:2)
检查文件中是否存在以空格分隔的单词:
with open(filename) as file:
found = (word in file.read().split())
或者相同但逐行阅读而不是全部加载到内存中:
with open(filename) as file:
found = any(word in line.split() for line in file)
如果文件的格式是每行一个字(/ user):
with open(filename) as file:
found = any(word == line.strip() for line in file)
在简单的情况下,您不需要正则表达式。如果每行可能有多个单词,那么可能会有任意标点符号,那么你可以使用你链接的正则表达式:
import re
matched = re.compile(r"\b" + re.escape(word) + r"\b").search
with open(filename) as file:
found = any(matched(line) for line in file)
\b
正则表达式匹配单词边界(单词的开头或结尾)。单词字符是字母,数字和下划线。如果re.escape()
包含word
等正则表达式元字符,则会使用*
。
答案 2 :(得分:0)
您引用的代码行是regular expression。基本上它在这种情况下的作用是确保在你正在搜索的字符串周围存在一个单词边界(用\b
指定),这将阻止你看到的子字符串匹配。
答案 3 :(得分:0)
正则表达式看起来有点过于复杂......我将使用.split()
来划分文件中的每一行
def CheckUserExists(user):
with open("C:/~/database.txt", 'r') as file:
for line in file:
if user in line.split():
return True
else:
return False
这对于database.txt文件来说'''就像'''用户之间有空格的数据库。 我们需要对源数据进行一些提取,以便为您提供一致的答案。
如果用户由特殊字符(引号,句号,逗号等)分隔,我将使用.replace("delimitingcharacter", " ")
..
def CheckUserExists(user):
with open("C:/~/database.txt", 'r') as file:
for line in file:
for word in line.split():
if user in word.replace(';', ' '):
return True
else:
return False