Python - 字符串中的第一个和最后一个字符必须是字母数字,否则删除

时间:2016-10-16 07:33:18

标签: python

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

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

st="-jkkujkl-ghjkjhkj*"

我想要回来:

st="jkkujkl-ghjkjhkj"

谢谢..

6 个答案:

答案 0 :(得分:5)

虽然不完全符合您的要求,但使用str.strip应该符合您的目的

import string

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

答案 1 :(得分: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的回答更简单,更清晰。

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

答案 2 :(得分:1)

您可以使用以下两个表达式:

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

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

答案 3 :(得分:0)

您可以使用正则表达式。

这样的事可以奏效;

\w.+?\w

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

答案 4 :(得分:0)

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

提示2:字母承租人在97

中的122ord()之间

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

答案 5 :(得分:0)

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

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