Python2.x中特定于条带的标点符号
我使用的是PythonV2.6,我有一个字符串,其中包含许多标点字符,我想去掉这些字符。现在我已经研究了如何使用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
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”
,让我们一起来看看