【问题标题】:How do I remove all punctuation that follows a string?如何删除字符串后面的所有标点符号?
【发布时间】:2012-05-03 03:34:34
【问题描述】:

这是一款游戏,用户可以在其中输入“冰茶..”之类的值 我想操纵字符串以返回没有尾随标点符号的“冰茶”。

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

试过了

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

如果末尾只有一个标点符号,则可以使用。但这并不是包罗万象的。

找到Java solution

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

【问题讨论】:

  • word.endswith('.' or ',') 并不代表你认为的那样。
  • 这意味着'.' or ','被评估产生'.',然后传递给word.endswith

标签: python regex string


【解决方案1】:
>>> 'words!?.,;:'.rstrip('?:!.,;')
'words'

【讨论】:

  • 那么函数会不会像 word = word.rstrip('?:!.,;') 然后返回 word?我是新手,如果这真的很基本,请道歉。
  • 或者直接退货。
  • 直接退货是什么意思?
  • return word.rstrip('?:!.,;')
  • 啊,太棒了!这简化了事情。以后要牢记这一点。太感谢了。这非常有效。
【解决方案2】:

在这种情况下,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) 我得到结果“无”
  • 在这种情况下你需要返回 result_string,或者只是 return re.sub(...)
【解决方案3】:
import string
s='aaa...,'
count= 0
>>> for l in s[::-1]:
...     if l in string.punctuation:
...             count = count +1
...     else:
...             break
>>> s[:c]
'aaa'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2020-01-09
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多