大多数Pythonic都是从字符串中删除所有非字母数字的前导字符

时间:2015-06-24 18:01:19

标签: python string alphanumeric non-alphanumeric

例如

!@#123myname --> myname
!@#yourname!@#123 --> yourname!@#123

有很多S.O. "删除所有字母数字字符的大多数pythonic方法的例子"但如果我只想删除导致第一个字母字符的非字母字符,那么最好的方法是什么?

我可以使用while循环但我正在寻找更好的python解决方案

3 个答案:

答案 0 :(得分:6)

只需使用str.lstrip

它需要一个字符串,其中包含要从字符串左侧删除的字符,并将删除这些字符,而不管它们出现的顺序如何。例如:

s = "!@#yourname!@#"
print s.lstrip('@!#') # yourname!@#

答案 1 :(得分:2)

您可以在字符串的开头使用匹配非字母数字字符的正则表达式:

s = '!@#myname!!'
r = re.compile(r"^\W+") # \W non-alphanumeric at start ^ of string

输出:

In [28]: r = re.compile(r"^\W+")  
In [29]: r.sub("",'!@#myname')
Out[29]: 'myname'    
In [30]: r.sub("",'!@#yourname!@#')
Out[30]: 'yourname!@#'

\W+会保留下划线,以便我们可以在开头保留字母和数字:

s = '!@#_myname!!'
r = re.compile(r"^[^A-Za-z0-9]+") 

print(r.sub("",s))
myname!!

如果您想删除第一个字母:

r = re.compile(r"^[^A-Za-z]+") 

答案 2 :(得分:-2)

如果要删除前导非字母/数字值:

while not s[0].isalnum(): s = s[1:]

如果您只想删除前导非字母字符:

while not s[0].isalpha(): s = s[1:]

样品:

s = '!@#yourname!@#'
while not s[0].isalpha(): s = s[1:]
print(s)

输出:

yourname!@#