【问题标题】:Check if Last Character in a String is Not a Letter检查字符串中的最后一个字符是否不是字母
【发布时间】:2015-01-09 14:48:44
【问题描述】:

我有一个这样的字符串:

"A_Origin1_1"

我想删除字符串末尾的所有数字和符号。获取:

"A_Origin"

我可以删除号码,但不能删除"_"。我该怎么做?

这是我目前的代码:

def getNumericTail(str):
    return re.split('[^\d]', str)[-1]

def endsWithNumber(str):
    return bool(getNumericTail(str))

def removeNumericalPortion(str):
    return str[:-1];

## IN MAIN ##
fixedName = "A_Origin1_1"
while endsWithNumber(fixedName) == True:
    fixedName = removeNumericalPortion(fixedName);

【问题讨论】:

  • 如果您想保留您的代码,可以将re.split('[^\d]'... 修改为re.split('[^\d_]'...)
  • 感谢大家的快速回复。只要允许,我就会接受答案。

标签: python regex string ironpython


【解决方案1】:

只需颠倒您的方法 - 如果它是数字则不要删除最后一个字符,如果它不是字母则将其删除:

>>> start = "A_Origin1_1"
>>> while start and not start[-1].isalpha():
    start = start[:-1]


>>> start
'A_Origin'

请注意,在while 测试中包含start 可确保正确处理空字符串;否则如果字符串中的所有字符都被剥离,它将崩溃:

>>> start = "123"
>>> while not start[-1].isalpha():
    start = start[:-1]



Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    while not start[-1].isalpha():
IndexError: string index out of range

你应该看看the style guide;函数名应该是lowercase_with_underscores,你不应该比较== True

【讨论】:

    【解决方案2】:
    str1="A_Origin1_1"
    
    while not str1[-1].isalpha():
        str1=str1[:-1]
    print (str1)
    

    输出:

    >>> 
    A_Origin
    >>>
    

    只检查字符串的最后一个字符不是字母。而循环将处理直到字符串的最后一个字符是字母。

    【讨论】:

    • 请注意,如果字符串中的所有字符都不是字母,这将失败(导致尝试确定""[-1])。
    【解决方案3】:

    你可以使用re.sub

    >>> re.sub(r'[\W_\d]+$', r'', "A_Origin1_1")
    'A_Origin'
    

    【讨论】:

      【解决方案4】:

      要匹配末尾没有 [A-Za-z] 的字符串,我会使用:

      ^.*?[^A-Za-z]$
      

      【讨论】:

        【解决方案5】:

        你不需要re.split你可以使用str.rstip()

        >>> import string
        >>> s.rstrip(string.digits+string.punctuation)
        'A_Origin'
        

        【讨论】:

          猜你喜欢
          • 2020-07-15
          • 2013-01-06
          • 1970-01-01
          • 2018-10-15
          • 1970-01-01
          • 2023-03-28
          • 2011-04-03
          • 2022-06-17
          • 2016-05-14
          相关资源
          最近更新 更多