如何删除紧随字符串后的所有标点符号?

7

这是一个关于编程的游戏,用户可以输入像"Iced tea..."这样的值。我希望能够处理这个字符串并返回"Iced tea",不包括结尾的标点符号。

寻找最优雅/最简单的Python解决方案。

已经尝试过:

def last_character(word):
  if word.endswith('.' or ','):
      word = word[:-1]
  return word 

如果只有一个标点符号在末尾,该方法有效。但它并不全面。

发现一个Java解决方案

String resultString = subjectString.replaceAll("([a-z]+)[?:!.,;]*", "$1");

word.endswith('.' or ',') дёҚжҳҜдҪ жғіиұЎдёӯзҡ„ж„ҸжҖқгҖӮ - Karl Knechtel
这意味着'.'或','被计算出来产生'.',并传递给word.endswith - Karl Knechtel
3个回答

17
>>> 'words!?.,;:'.rstrip('?:!.,;')
'words'

那么这个函数会是像这样的东西 word = word.rstrip('?:!.,;') 然后返回 word 吗?我是新手,如果这很基础的话请见谅。 - user1186742
或者你可以直接返回它。 - Ignacio Vazquez-Abrams
你的意思是直接返回它吗? - user1186742
2
return word.rstrip('?:!.,;') - Ignacio Vazquez-Abrams
啊,太棒了!这简化了事情。将来会记住的。非常感谢你。这个完美地解决了问题。 - user1186742

0
在这种情况下,rstrip 可能是你想要的。但一般来说,将类似 Java 的东西翻译成 Python 并不难。直接翻译如下:
import re
subject_string = 'Iced tea..'
result_string = re.sub('([a-z]+)[?:!.,;]*',r'\1',subject_string)

很好知道。但是当我尝试如下操作时:subject_string = word,result_string = re.sub('([a-z]+)[?:!.,;]*', r'\1', word),我得到了“None”的结果。 - user1186742
在这种情况下,您需要返回result_string,或者只需return re.sub(...) - Mark Reed

0
import string
s='aaa...,'
count= 0
>>> for l in s[::-1]:
...     if l in string.punctuation:
...             count = count +1
...     else:
...             break
>>> s[:c]
'aaa'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接