Python正则表达式
刚刚做了一个edabit挑战,我就被卡住了,如何让这段代码通过所有测试:目标是删除所有“特殊”字符(例如!@$%^&\*)并返回新字符串。唯一允许的非字母数字字符是破折号、下划线和空格。“我下面的代码有两个问题:1)它似乎不适用于包含“!“即使我在我的模式列表中找到了它。2)如果我使用re.sub(r'[\w]',“”,txt),我也找不到一种方法让它不去掉“-,”,“,”Python正则表达式,python,regex,Python,Regex,刚刚做了一个edabit挑战,我就被卡住了,如何让这段代码通过所有测试:目标是删除所有“特殊”字符(例如!@$%^&\*)并返回新字符串。唯一允许的非字母数字字符是破折号、下划线和空格。“我下面的代码有两个问题:1)它似乎不适用于包含“!“即使我在我的模式列表中找到了它。2)如果我使用re.sub(r'[\w]',“”,txt),我也找不到一种方法让它不去掉“-,”,“,” 要删除除破折号以外的所有特殊字符(如\w),请在空格下面加下划线: import re def remove_specia
要删除除破折号以外的所有特殊字符(如\w),请在空格下面加下划线:
import re
def remove_special_characters(txt):
x = re.sub('[^\w\-_\s]', '', txt)
return x
您可以使用
字符串。标点符号
-返回被视为标点符号的ASCII字符字符串
import string
print string.punctuation # Returns '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
在您的帮助下,此解决方案有效:
def remove_special_characters(txt):
pattern = '!@#$%^&*()\\.+[]={}<>~`?,|'
import re
x = re.sub('[' + re.escape(pattern) + ']', '', txt)
return x
def删除特殊字符(txt):
模式='!@$%^&*()\.+[]={}`?,|'
进口稀土
x=re.sub('['+re.escape(模式)+']','',txt)
返回x
您可能希望指定您想要的内容的否定,而不是您不想要的内容的列表:r“[^\w\s-+”
。是否也要保留制表符?为什么不直接使用re.sub(r'[^\w-],'',txt)
?@LevZakharov,因为空格、破折号和下划线不能删除。您能提供一个失败的输入吗?因为您的正则表达式应该按照您所描述的那样工作(它删除了!
)。但最终,如果您有一组已知的允许字符和一组未知的不允许字符,则应使用否定。@DYZ\w
包含下划线。无需在括号内转义元字符(除非^
和-
,如果先给出)所以这几乎奏效了,但需要更多的特殊字符:问题是string.puncuation去掉了破折号、空格和下划线,我必须把它们留在里面,这就是我不知道怎么做的。也许你应该试试这个:-“”。join(如果c不在“{chars your don't want}”中,那么c代表c的行)
print re.sub(r'['+string.punctuation+']', '',text)
def remove_special_characters(txt):
pattern = '!@#$%^&*()\\.+[]={}<>~`?,|'
import re
x = re.sub('[' + re.escape(pattern) + ']', '', txt)
return x