请帮助,导致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()应该接受的格式,对吧?
答案 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'
进行检查。您可以在功能中检查特殊字符。