大多数 Pythonic 是从字符串中去除所有非字母数字前导字符
Most Pythonic was to strip all non-alphanumeric leading characters from string
例如
!@#123myname --> myname
!@#yourname!@#123 --> yourname!@#123
有很多S.O。 "most pythonic ways of removing all alphanumeric characters" 的示例,但如果我只想删除导致第一个字母字符的非字母字符,最好的方法是什么?
我可以用 while 循环来完成,但我正在寻找更好的 python 解决方案
只需使用 str.lstrip
.
它需要一个包含要从字符串左侧删除的字符的字符串,并且无论这些字符出现的顺序如何,都会删除这些字符。例如:
s = "!@#yourname!@#"
print s.lstrip('@!#') # yourname!@#
您可以使用正则表达式匹配字符串开头的 非字母数字 个字符:
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]+")
如果要删除前导 non-alpha/numeric 值:
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!@#
例如
!@#123myname --> myname
!@#yourname!@#123 --> yourname!@#123
有很多S.O。 "most pythonic ways of removing all alphanumeric characters" 的示例,但如果我只想删除导致第一个字母字符的非字母字符,最好的方法是什么?
我可以用 while 循环来完成,但我正在寻找更好的 python 解决方案
只需使用 str.lstrip
.
它需要一个包含要从字符串左侧删除的字符的字符串,并且无论这些字符出现的顺序如何,都会删除这些字符。例如:
s = "!@#yourname!@#"
print s.lstrip('@!#') # yourname!@#
您可以使用正则表达式匹配字符串开头的 非字母数字 个字符:
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]+")
如果要删除前导 non-alpha/numeric 值:
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!@#