如何擦除数字之间的字母(Python)



我对这段代码有很多困难,我就是找不到任何解决方案,我将把我的代码贴在下面。

from tkinter import *
a = []
class test(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.parent.title('testing')
        self.pack(fill=BOTH, expand=1)
        self.d = DoubleVar()
        self.d.set('None')
        def grab():
            b = ent.get()
            a.append(b)
            c = [s.strip('qwertyuiopasdfghjklzxcvbnm') for s in a]
            self.d.set(c[-1])
            if c[-1] == '':
                self.d.set('None')
        ent = Entry(self)
        ent.grid(row=0, column=0)
        but = Button(self, text='Get', command=grab)
        but.grid(row=1, column=0)
        Label(self, textvariable=self.d).grid(row=2, column=0)
root = Tk()
app = test(root)
root.mainloop

我想我的目标是能够忽略或删除放置在输入框内的字母,正如您所看到的,我已经使用了条带方法,但它没有按我想要的方式工作。如果有人能提供一些建议,或代码,或链接到我的问题,我忽略了,这将是惊人的,我将非常感激。

编辑:它已经清除了前后字母,但中间没有

验证器将是解决此问题的正确模式。在tkinter中交互式验证条目小部件内容在tkinter中有一个实现,您应该可以使用。

用一点lambda就可以了

    a = "123a3456b"
    filter(lambda '0' <= x <= '9', a)
    print a
    "1233456"

你在数字里面得到了字母,因为你先把字符串放入了一个列表。

strip()删除开头和结尾字符,因此如果您有一个字符串:aaa000bbb111ccc,从它中剥离字母只会删除最外面的字母。但是,如果您拆分字符串,然后从被拆分字符串的每个元素中删除字母,那么您将有效地删除所有字母。然后,您可以将列表的其余部分一起join()以返回您的字符串。考虑这个例子:

>>> import string # string.ascii_letters returns a string of all letters (upper and lower), just easier than typing them
>>> def check(x):
    return ''.join([char.strip(string.ascii_letters) for char in x])
>>> var = 'aaa000bbb111ccc'
>>> var_as_list = [var]
>>> check(var)
'000111'
>>> check(var_as_list)
'000bbb111'

因此,c应为:

c = ''.join([s.strip('qwertyuiopasdfghjklzxcvbnm') for s in b.get()])

您还应该考虑一些进一步的验证,如果您希望字段只包含float s。这里有一个方法可以跟踪StringVar()实例的任何更改,并将其限制为仅更改数字和句号:

from tkinter import *
import string
def check(*args):
    # make a 'whitelist' of allowable characters
    whitelist = string.digits + '.'
    # set var to its current value - any characters not in whitelist
    var.set(''.join([i for i in var.get() if i in whitelist]))
root = Tk()
var = StringVar()
var.set('0.0')
Entry(root, textvariable=var).grid(row=0, column=0)
Label(root, textvariable=var).grid(row=1, column=0)
var.trace('w', check) # if var changes, call check()
mainloop()

一个简洁的方法就是:

filter(lambda s: not str.isalpha(s), data)

最新更新