删除CHOOSEN特殊字符功能

时间:2018-10-12 17:17:44

标签: python regex python-3.x tkinter

请帮助,导致Im失去理智。我可以找到类似的问题,但没有一个是具体的。

-我正在尝试在Tkinter中创建一个简单的编译器,其功能是删除所选的特殊字符。 -我得到了每个字符(点,冒号等)的按钮,并且我想创建一个将特殊字符作为参数的函数,然后从ScrolledText字段中将其删除。这是我的最佳尝试:

import re

content = 'Test. test . .test'
special = '.'

def delchar(char):
    adjustedchar = str("'[" + char + "]'")
    p = re.compile(adjustedchar)
    newcontent = p.sub('', content)
    print(newcontent)

delchar(special)

输出(什么都没有改变)>>>'测试。测试。 .test'

这是怎么回事?如何使其运作?有更好的解决方案吗? 我知道我可以为每个字符创建每个函数(尝试过并且可以正常工作),但是那样会创建10个不必要的函数。我想保持干燥。另外,我的下一个功能就是使用用户输入来做同样的事情。

那是行不通的。如果我会打印例如。 Adjustchar,我会得到:

'[。]'

这是re.compile()应该接受的格式,对吧?

2 个答案:

答案 0 :(得分:1)

您需要使用要匹配的模式重新编译,而不是用replace-content:

import re

content = 'Test. test . .test'
special = '.'

def delchar(char):
    adjustedchar = str("'[" + char + "]'")
    p = re.compile("["+char+"]")     # replace the dots, not '.'
    newcontent = p.sub(adjustedchar, content) # with adjustedchar,change to '' if you like
    print(newcontent)

delchar(special)

您的content不包含'.',因此不能替换。如果您将模式更改为"[.]",那么您正在寻找要替换的文字点-而不是'两侧的点

输出:

Test'[.]' test '[.]' '[.]'test

您也可以只使用字符串替换:Test. Test . .test'.replace(".","'.'")

答案 1 :(得分:1)

您的代码有效,问题在于.(点)是特殊字符。 将您的代码更改为:

import re

content = 'Test. test . .test'
special = '\.'

def delchar(char):
    adjustedchar = str("'[" + char + "]'")
    p = re.compile(char)
    newcontent = p.sub('', content)
    print(newcontent)

delchar(special)

您也可以通过输入special = 't'进行检查。您可以在功能中检查特殊字符。