Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式_Python_Regex - Fatal编程技术网

Python正则表达式

Python正则表达式,python,regex,Python,Regex,刚刚做了一个edabit挑战,我就被卡住了,如何让这段代码通过所有测试:目标是删除所有“特殊”字符(例如!@$%^&\*)并返回新字符串。唯一允许的非字母数字字符是破折号、下划线和空格。“我下面的代码有两个问题:1)它似乎不适用于包含“!“即使我在我的模式列表中找到了它。2)如果我使用re.sub(r'[\w]',“”,txt),我也找不到一种方法让它不去掉“-,”,“,” 要删除除破折号以外的所有特殊字符(如\w),请在空格下面加下划线: import re def remove_specia

刚刚做了一个edabit挑战,我就被卡住了,如何让这段代码通过所有测试:目标是删除所有“特殊”字符(例如!@$%^&\*)并返回新字符串。唯一允许的非字母数字字符是破折号、下划线和空格。“我下面的代码有两个问题:1)它似乎不适用于包含“!“即使我在我的模式列表中找到了它。2)如果我使用re.sub(r'[\w]',“”,txt),我也找不到一种方法让它不去掉“-,”,“,”


要删除除破折号以外的所有特殊字符(如\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