在python列表中搜索单词的其余部分
用户将键入一个输入字段。在他们键入每个字母后,它将在列表中搜索单词的其余部分。例如,如果用户键入在python列表中搜索单词的其余部分,python,regex,list,search,Python,Regex,List,Search,用户将键入一个输入字段。在他们键入每个字母后,它将在列表中搜索单词的其余部分。例如,如果用户键入Ar和列表=[“Arial”、“Cat”、“Pie”、“Terminal”],它将用Arial替换他们键入的内容,因为前两个字母匹配。 现在请记住,我对python比较陌生,所以我没有正则表达式。我能处理“改变”这个词等等。我只需要搜索列表的帮助 代码如下: fonts = ["Arial","Calibri","Cambria","Cambria Math","Candara","Comic San
Ar
和列表=[“Arial”、“Cat”、“Pie”、“Terminal”]
,它将用Arial
替换他们键入的内容,因为前两个字母匹配。
现在请记住,我对python比较陌生,所以我没有正则表达式。我能处理“改变”这个词等等。我只需要搜索列表的帮助
代码如下:
fonts = ["Arial","Calibri","Cambria","Cambria Math","Candara","Comic Sans MS","Consolas","Constantia","Corbel","Courier","Courier New","Fixedsys","Franklin Gothic","Gabriola","Georgia","Impact","Lucida Console","Lucida Sans Unicode","Modern","MS Sans Serif","MS Serif","Palatino Linotype","Roman","Segoe Print","Segoe Script","Segoe UI","Segoe UI Symbol","Small Fonts","Small Fonts","System","Tahoma","Terminal","Times New Roman","Trebuchet MS","Verdana"]
def findfontname(event):
#Search list:
for item in fonts:
if item == findfont.get(0,END):
print("Found")
findfont.bind("<Key>", findfontname)
fonts=[“Arial”、“Calibri”、“Cambria”、“Cambria Math”、“Candara”、“Comic Sans MS”、“Consolas”、“Constantia”、“Corbel”、“Courier”、“Courier New”、“Fixedsys”、“Franklin Gothic”、“Gabriola”、“Georgia”、“Impact”、“Lucida Console”、“Lucida Sans Unicode”、“Modern”、“MS Sans Serif”、“MS Serif”、“Palatino Linotype”、“Roman”、“Segoe Print”、“Segoe脚本”、“Segoe UI”,“Segoe用户界面符号”、“小字体”、“小字体”、“系统”、“塔荷马”、“终端”、“泰晤士报新罗马”、“投石机MS”、“Verdana”]
def findfontname(事件):
#搜索列表:
对于字体中的项目:
如果item==findfont.get(0,END):
打印(“找到”)
findfont.bind(“,findfontname)
您可以使用中的检查某个文本是否在其他文本的任何位置
fonts = ["Arial","Calibri","Cambria","Cambria Math","Candara","Comic Sans MS","Consolas","Constantia","Corbel","Courier","Courier New","Fixedsys","Franklin Gothic","Gabriola","Georgia","Impact","Lucida Console","Lucida Sans Unicode","Modern","MS Sans Serif","MS Serif","Palatino Linotype","Roman","Segoe Print","Segoe Script","Segoe UI","Segoe UI Symbol","Small Fonts","Small Fonts","System","Tahoma","Terminal","Times New Roman","Trebuchet MS","Verdana"]
text = findfont.get(0,END):
text = text.lower()
for item in fonts:
if text in item.lower():
print("Found")
如果搜索以其他文本开头的文本,可以使用startswith()
text = findfont.get(0,END):
text = text.lower()
for item in fonts:
if item.lower().startswith(text):
print("Found")
我不知道你剩下的代码是什么样子的,但希望我能给你一个有用的演示。就我理解你的问题而言,你想检查字体列表中的字符串是否以给定的子字符串开头
>>> fonts = ["Arial","Calibri","Cambria","Cambria Math"]
>>> sub = 'xYz' # there should be no match for this
>>> sub = sub.lower() # convert to lowercase
>>> [x for x in fonts if x.lower().startswith(sub)]
[]
因此,第一个示例返回一个空列表,在布尔上下文中,该列表的计算结果为False
>>> sub = 'Ar'
>>> sub = sub.lower()
>>> [x for x in fonts if x.lower().startswith(sub)]
['Arial']
这将返回一个结果,因此您现在应该能够显示“Arial”。当用户输入以C开头的内容时,会出现问题
>>> sub = 'cA'
>>> sub = sub.lower()
>>> [x for x in fonts if x.lower().startswith(sub)]
['Calibri', 'Cambria', 'Cambria Math']
如您所见,有三种可能的匹配。现在由您的设计决定是显示所有匹配项,还是在只有一个匹配项之前不显示任何内容。如果您希望使用后一种选项,您可以发布如下内容:
matches = [x for x in fonts if x.lower().startswith(sub)]
if len(matches) == 1: # exactly one match
match = matches[0]
# code to display the match
<>最后注意:如果你的字体列表变大,考虑把它变成一个“代码> SET/CODE”。< /P>这个问题与列表上的TKTET-查找文本无关,是正常的Python问题。@ Furas是抱歉的,因为它涉及GUI输入字段。在< /代码>中使用<代码>检查是否有文本在其他文本内。
=以
开始,如果用户输入“ca”,您希望有什么行为?我认为OP正在尝试实现某种形式的自动完成功能,因此中的不会有帮助。我当然可能是错的,但这就是我理解问题的方式。@furas感谢它工作得很好,而且我在.get(0,END)中遇到了一个错误对许多参数说,因此我删除了(0,END)现在它工作得很好!如果findfont
是StringVar
,那么它使用不同的功能,然后Text
小部件。@furas in不幸不能正常工作,但我发现了它,谢谢你的帮助!这工作非常完美,我尝试在中使用,但没有正确工作,谢谢!@cdw100100在中使用失败,因为e、 例如,当用户以“m”开始输入时,“Cambria”中的'm
将返回True
。是的,这确实发生了