消除 Python 中的一系列 .replace() 调用
Eliminating series of .replace() calls in Python
我正在从事一个涉及解析文本页面的项目。我编写了以下函数来从单词中删除某些标点符号并将其转换为小写:
def format_word(word):
return word.replace('.', '').replace(',', '').replace('\"', '').lower()
有什么方法可以将对 .replace() 的所有调用合并为一个吗?这看起来相当丑陋!我能想到的唯一方法如下:
def format_word(word):
for punct in '.,\"':
word.replace(punct, '')
return word.lower()
你很接近。如果您不仅调用 .replace()
,而且还使用它的结果,您就完成了:
def format_word(word):
for punct in '.,\"':
word = word.replace(punct, '')
return word.lower()
如果要删除字符,可以使用str.translate
:
在python 2.x:
>>> 'Hello, "world".'.translate(None, ',."')
'Hello world'
在python 3.x:
>>> 'Hello, "world".'.translate(dict.fromkeys(map(ord, ',."')))
'Hello world'
你可以使用 re
module
import re
>>> def format_word(word):
... return re.sub(r'[,."]', "", word)
...
>>> print format_word('asdf.,"asdf')
asdfsdf
您可以使用正则表达式来做到这一点:
re.sub("[.,\"]", "", "\"wo,rd.")
我正在从事一个涉及解析文本页面的项目。我编写了以下函数来从单词中删除某些标点符号并将其转换为小写:
def format_word(word):
return word.replace('.', '').replace(',', '').replace('\"', '').lower()
有什么方法可以将对 .replace() 的所有调用合并为一个吗?这看起来相当丑陋!我能想到的唯一方法如下:
def format_word(word):
for punct in '.,\"':
word.replace(punct, '')
return word.lower()
你很接近。如果您不仅调用 .replace()
,而且还使用它的结果,您就完成了:
def format_word(word):
for punct in '.,\"':
word = word.replace(punct, '')
return word.lower()
如果要删除字符,可以使用str.translate
:
在python 2.x:
>>> 'Hello, "world".'.translate(None, ',."')
'Hello world'
在python 3.x:
>>> 'Hello, "world".'.translate(dict.fromkeys(map(ord, ',."')))
'Hello world'
你可以使用 re
module
import re
>>> def format_word(word):
... return re.sub(r'[,."]', "", word)
...
>>> print format_word('asdf.,"asdf')
asdfsdf
您可以使用正则表达式来做到这一点:
re.sub("[.,\"]", "", "\"wo,rd.")