去除 python 中字符串中的标点符号
Getting rid of punctiations in a string in python
这是我编写的用于从字符串中删除逗号和句号的代码
forbidden=(",",".")
text=input("Your sentence")
for i in range(0,len(text)):
if text[i] in forbidden:
text=text.replace(text[i],'')
i-=1
print text
我的输入是a,n
但是报错说字符串索引超出范围
谁能解释为什么?
您可以使用 re
模块
以更好的方式做到这一点
>>> import re
>>> s = "asdsd,dweds.,sdfsf."
>>> re.sub('(,|\.)', '', s)
'asdsddwedssdfsf'
你可以用一个简单的 for in 循环遍历一个字符串,你不需要为索引而烦恼。
forbidden=(",",".")
text=input("Your sentence")
for c in text:
if c in forbidden:
text=text.replace(c,'')
print text
我看到两个问题:
len(text)
在循环开始时恰好计算一次。 text
在您对其进行迭代时缩小的事实对 i
以后的值没有任何影响。
- 在循环中递减
i
对下一次迭代中 i
的值没有影响。 Python 简单地翻过旧值而不看它。
如果您绝对致力于通过遍历 text
的索引来实现此算法,那么使用 while
循环将解决这两个问题。 while
循环的条件会在每次迭代时进行评估,并且您可以完全控制 incrementing/decrementing.
的值
forbidden=(",",".")
text=raw_input("Your sentence: ")
i = 0
while i < len(text):
if text[i] in forbidden:
text=text.replace(text[i],'')
else:
i+=1
print text
输出:
Your sentence: foo,bar,baz.qux,troz,zort.
foobarbazquxtrozzort
...但是如果您对不同的方法持开放态度,那么如果您迭代禁用字符而不是 text
.
将会节省您很多精力
forbidden=(",",".")
text=raw_input("Your sentence: ")
for c in forbidden:
text = text.replace(c, "")
print text
您可以使用 list comprehensions
过滤点和逗号,然后使用 reduce()
将元素添加到 string
中,例如:
forbidden = (",", ".")
text = 'a,n'
text = reduce(lambda x, y: x + y, [i for i in text if i not in forbidden])
print text
或者您可以使用
text = ''.join([i for i in text if i not in forbidden])
输出:
an
这是我编写的用于从字符串中删除逗号和句号的代码
forbidden=(",",".")
text=input("Your sentence")
for i in range(0,len(text)):
if text[i] in forbidden:
text=text.replace(text[i],'')
i-=1
print text
我的输入是a,n
但是报错说字符串索引超出范围
谁能解释为什么?
您可以使用 re
模块
>>> import re
>>> s = "asdsd,dweds.,sdfsf."
>>> re.sub('(,|\.)', '', s)
'asdsddwedssdfsf'
你可以用一个简单的 for in 循环遍历一个字符串,你不需要为索引而烦恼。
forbidden=(",",".")
text=input("Your sentence")
for c in text:
if c in forbidden:
text=text.replace(c,'')
print text
我看到两个问题:
len(text)
在循环开始时恰好计算一次。text
在您对其进行迭代时缩小的事实对i
以后的值没有任何影响。- 在循环中递减
i
对下一次迭代中i
的值没有影响。 Python 简单地翻过旧值而不看它。
如果您绝对致力于通过遍历 text
的索引来实现此算法,那么使用 while
循环将解决这两个问题。 while
循环的条件会在每次迭代时进行评估,并且您可以完全控制 incrementing/decrementing.
forbidden=(",",".")
text=raw_input("Your sentence: ")
i = 0
while i < len(text):
if text[i] in forbidden:
text=text.replace(text[i],'')
else:
i+=1
print text
输出:
Your sentence: foo,bar,baz.qux,troz,zort.
foobarbazquxtrozzort
...但是如果您对不同的方法持开放态度,那么如果您迭代禁用字符而不是 text
.
forbidden=(",",".")
text=raw_input("Your sentence: ")
for c in forbidden:
text = text.replace(c, "")
print text
您可以使用 list comprehensions
过滤点和逗号,然后使用 reduce()
将元素添加到 string
中,例如:
forbidden = (",", ".")
text = 'a,n'
text = reduce(lambda x, y: x + y, [i for i in text if i not in forbidden])
print text
或者您可以使用
text = ''.join([i for i in text if i not in forbidden])
输出:
an