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/8/qt/6.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
Python2.x中特定于条带的标点符号_Python_String_Strip - Fatal编程技术网

Python2.x中特定于条带的标点符号

Python2.x中特定于条带的标点符号,python,string,strip,Python,String,Strip,我使用的是PythonV2.6,我有一个字符串,其中包含许多标点字符,我想去掉这些字符。现在我已经研究了如何使用string.percentration()函数,但不幸的是,我想去掉除句号和破折号以外的所有标点字符。总共,我只想去掉5个标点符号-()\“ 有什么建议吗?我希望这是最有效的方法 感谢您使用: 或: 但是string.translate似乎要快一个数量级: In [148]: %timeit (s*1000).translate(None, r"()\"'") 10000 loops

我使用的是PythonV2.6,我有一个字符串,其中包含许多标点字符,我想去掉这些字符。现在我已经研究了如何使用
string.percentration()
函数,但不幸的是,我想去掉除句号和破折号以外的所有标点字符。总共,我只想去掉5个标点符号-
()\“

有什么建议吗?我希望这是最有效的方法

感谢您使用:

或:

但是
string.translate
似乎要快一个数量级:

In [148]: %timeit (s*1000).translate(None, r"()\"'")
10000 loops, best of 3: 112 us per loop

In [146]: %timeit re.sub(r"[\\()'\"]",'',s*1000)
100 loops, best of 3: 2.11 ms per loop
使用:

或:

但是
string.translate
似乎要快一个数量级:

In [148]: %timeit (s*1000).translate(None, r"()\"'")
10000 loops, best of 3: 112 us per loop

In [146]: %timeit re.sub(r"[\\()'\"]",'',s*1000)
100 loops, best of 3: 2.11 ms per loop

您可以创建一个包含所有要替换的字符的dict,并将其替换为您选择的字符

char_replace = {"'":"" , "(":"" , ")":"" , "\":"" , """:""}

for i,j in char_replace.iteritems():
        string = string.replace(i,j)

您可以创建一个包含所有要替换的字符的dict,并将其替换为您选择的字符

char_replace = {"'":"" , "(":"" , ")":"" , "\":"" , """:""}

for i,j in char_replace.iteritems():
        string = string.replace(i,j)
您可以将
table
设置为
None
,这将导致从字符串中删除
deletechars
中的所有字符:

s.translate(None, r"()\"'")
一些例子:

>>> "\"hello\" '(world)'".translate(None, r"()\"'")
'hello world'
>>> "a'b c\"d e(f g)h i\\j".translate(None, r"()\"'")
'ab cd ef gh ij'
您可以将
table
设置为
None
,这将导致从字符串中删除
deletechars
中的所有字符:

s.translate(None, r"()\"'")
一些例子:

>>> "\"hello\" '(world)'".translate(None, r"()\"'")
'hello world'
>>> "a'b c\"d e(f g)h i\\j".translate(None, r"()\"'")
'ab cd ef gh ij'

您可以列出所有不需要的字符:

unwanted = ['(', ')', '\\', '"', '\'']
然后您可以制作一个函数
strip\u标点符号
,如下所示:

def strip_punctuation(s): 
    for u in unwanted: 
        s = s.replace(u, '')
    return s

您可以列出所有不需要的字符:

unwanted = ['(', ')', '\\', '"', '\'']
然后您可以制作一个函数
strip\u标点符号
,如下所示:

def strip_punctuation(s): 
    for u in unwanted: 
        s = s.replace(u, '')
    return s
使用理解:

''.join(x for x in my_string if x not in strip_chars)
使用过滤器:

''.join(filter(lambda x: x not in strip_chars, my_string))
输出:

Hello World
使用理解:

''.join(x for x in my_string if x not in strip_chars)
使用过滤器:

''.join(filter(lambda x: x not in strip_chars, my_string))
输出:

Hello World

重复的重复无需制作空白翻译表;只需使用
None
。此外,您的代码格式已损坏。看起来像是不匹配的
。Josh,感谢您更正有关
翻译(无,…)
。格式哪里不正确?我已经运行了代码。它似乎可以工作。嗯,
打印
显示为红色。看来SO没有正确解析三重引号。也许您需要提示它代码片段是Python?我不知道。不需要做一张空白的翻译表;只需使用
None
。此外,您的代码格式已损坏。看起来像是一个不匹配的
。Josh,感谢您对
翻译的更正(无,…)
。格式哪里不正确?我已经运行了代码。它似乎工作正常。好吧,
print
显示为红色。似乎没有正确解析三重引号。也许你需要提示它代码段是Python?我不知道。这不会从原始字符串中删除反斜杠。
r.sub(''a\\b'))-->'a\\b'
对,关于这个问题有很多答案,但我认为编译后的regexp将是最有效的解决方案。请记住,“给一个人一个正则表达式,他将匹配一个字符串……但是通过教他如何创建它们,你已经给了他足够的绳子来吊死自己。”@保罗:我不喜欢原始字符串,它们让我想起Windows中的路径;)@Paulo:我发现这取决于你需要多少反斜杠。
r“C:\Program Files\SomeCompany\SomeProgram Version 7\Internals\foobar.bla”
显然比另一种要好得多,但很多时候我需要
“\t\n\0\xad\xde\xef\xbe“
,太…让我们知道这不会从原始字符串中删除反斜杠
r.sub('''a\\b')-->'a\\b'
对,关于这个问题有很多答案,但我认为编译的regexp将是最有效的解决方案。永远记住,“给一个人一个正则表达式,他就会匹配一个字符串……但通过教他如何创建它们,你已经给了他足够的绳子来吊死自己”@Paulo:我不喜欢原始字符串,它们让我想起窗口中的路径;)@保罗:我发现这取决于你需要多少反斜杠
r“C:\Program Files\SomeCompany\SomeProgram Version 7\Internals\foobar.bla”
显然比备选方案好得多,但很多时候我也需要
“\t\n\0\xad\xde\xef\xbe”
,让我们一起来看看