【问题标题】:Python - First and last character in string must be alpha numeric, else delete [duplicate]Python - 字符串中的第一个和最后一个字符必须是字母数字,否则删除[重复]
【发布时间】:2016-10-16 07:33:18
【问题描述】:

我想知道如何实现字符串检查,我想确保字符串的第一个(&last)字符是字母数字。我知道isalnum,但是如何使用它来实现此检查/替换?

所以,我有一个这样的字符串:

st="-jkkujkl-ghjkjhkj*"

我想回来:

st="jkkujkl-ghjkjhkj"

谢谢..

【问题讨论】:

    标签: python


    【解决方案1】:

    虽然不完全是您想要的,但使用 str.strip 应该可以达到您的目的

    import string
    
    st.strip(string.punctuation)
    Out[174]: 'jkkujkl-ghjkjhkj'
    

    【讨论】:

    • @Abhijit:太棒了!感谢您提供非常 Pythonic 和正则表达式(更少)的答案!
    【解决方案2】:

    您可以使用如下所示的正则表达式:

    import re
    # \W is a set of all special chars, and also include '_'
    # If you have elements in the set [\W_] at start and end, replace with ''
    p = re.compile(r'^[\W_]+|[\W_]+$') 
    st="-jkkujkl-ghjkjhkj*"
    print p.subn('', st)[0]
    

    输出: jkkujkl-ghjkjhkj

    编辑:

    如果你的特殊字符在集合中:!"#$%&\'()*+,-./:;?@[\]^_`{|}~强>

    @Abhijit 的回答更加简单明了。

    如果您不确定,那么这个正则表达式版本会更好。

    【讨论】:

    • 我使用了类似的东西,但是您可以在表达式中添加 + 或 *,以删除多次出现的非 alpha 字符。
    • 听起来是个好主意。谢谢,我会编辑正则表达式。
    【解决方案3】:

    您可以使用以下两种表达方式:

    st = re.sub('^\W*', '', st)
    st = re.sub('\W*$', '', st)
    

    这将删除字符串开头和结尾的所有非 alpha 字符,而不仅仅是第一个字符。

    【讨论】:

    • 最好使用+
    • 你能解释一下原因吗?
    • @Fejs ^\W* 将匹配字符串 'foo',因此这是一个浪费的替换循环。您可以尝试在值foo 的字符串上执行st = re.sub('^\W*', '-', st),您将在前面看到-
    • 是的,只需对您的答案执行re.sub('\\*', '+') 就完美了 ;)
    【解决方案4】:

    你可以使用正则表达式。

    这样的事情可能会奏效;

    \w.+?\w
    

    但是我不知道如何在 python 中进行正则表达式匹配..

    【讨论】:

      【解决方案5】:

      提示 1: ord() 可以将字母转换为字符编号

      提示 2: alpha 承租人在ord() 中的97122 之间

      提示 3: st[0] 将返回字符串中的第一个字母 st[-1] 将返回最后一个字母

      【讨论】:

        【解决方案6】:

        您的问题的确切答案可能如下:

        def stringCheck(astring):
            firstChar = astring[0] if astring[0].isalnum() else ''
            lastChar = astring[-1] if astring[-1].isalnum() else ''
            return firstChar + astring[1:-1] + lastChar
        

        【讨论】:

          猜你喜欢
          • 2011-04-11
          • 1970-01-01
          • 2020-07-15
          • 2022-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多