前導字符例如大多數Python化是去除所有非字母數字串從
[email protected]#123myname --> myname
[email protected]#[email protected]#123 --> [email protected]#123
有很多S.O.的「刪除所有字母數字字符的大多數pythonic方法」的例子,但如果我只想刪除導致第一個字母字符的非字母字符,那麼最好的方法是什麼?
我可以用while循環,但尋找一個更好的解決方案蟒
前導字符例如大多數Python化是去除所有非字母數字串從
[email protected]#123myname --> myname
[email protected]#[email protected]#123 --> [email protected]#123
有很多S.O.的「刪除所有字母數字字符的大多數pythonic方法」的例子,但如果我只想刪除導致第一個字母字符的非字母字符,那麼最好的方法是什麼?
我可以用while循環,但尋找一個更好的解決方案蟒
:如果您只想刪除
while not s[0].isalnum(): s = s[1:]
領先的非字母字符:
while not s[0].isalpha(): s = s[1:]
樣品:
s = '[email protected]#[email protected]#'
while not s[0].isalpha(): s = s[1:]
print(s)
輸出:
[email protected]#
非常優雅,謝謝 –
''1'.isalnum()' - >'True',''''isalpha()' - >'False' – vaultah
@vaultah對不起,我編輯了你之後的問題回答了。我的意思是非字母字符,而不是非字母數字字符。你的回答對原始問題是正確的,我的錯誤 –
只需使用str.lstrip
IM做到這一點。
它需要一個包含要從字符串左側移除的字符的字符串,並將刪除這些字符,而不管它們出現的順序如何。例如:
s = "[email protected]#[email protected]#"
print s.lstrip('@!#') # [email protected]#
這是迄今爲止最pythonic的答案。如果你想刪除所有標點符號,你也可以使用's.lstrip(string.punctuation)' – Granitosaurus
雖然這很好而且可讀,但它可能不會像所述的那樣回答問題。海報想要從字符串的開頭刪除所有*非字母數字*字符。目前還不清楚是否只有非字母數字字符是'!@#'(或者在'string.punctuation'中)。更通用的解決方案是首先用'剩餘物=集(s) - 集(string.ascii_letters)',然後strip:'s.lstrip(str(剩餘物))'來找到它們。如果'!@#'是OP所期望的,這個答案可能就足夠了。 – jme
你可以使用正則表達式在字符串的開始匹配非字母數字字符:
s = '[email protected]#myname!!'
r = re.compile(r"^\W+") # \W non-alphanumeric at start^of string
輸出:
In [28]: r = re.compile(r"^\W+")
In [29]: r.sub("",'[email protected]#myname')
Out[29]: 'myname'
In [30]: r.sub("",'[email protected]#[email protected]#')
Out[30]: '[email protected]#'
\W+
將繼續強調這樣在開始時只保留字母和數字我們可以:
s = '[email protected]#_myname!!'
r = re.compile(r"^[^A-Za-z0-9]+")
print(r.sub("",s))
myname!!
如果你想只是刪除到第一個字母:如果你想刪除導致非字母/數字值
r = re.compile(r"^[^A-Za-z]+")
嗯不''[^ A-Za-z0-9]'只執行ASCII碼匹配? – vaultah
怎麼你的循環看? –
你認爲'é'是字母數字嗎? '''和'1.2'一樣呢? – TessellatingHeckler
@Blythe,你可以將你的問題標題與你的問題主體相匹配,並添加你認爲的*字母字符*? –