我需要列印一個字串,使用這個規則。 第一個字母應該是大寫的,并使所有其他字母都是小寫的。名字中只允許有 a-z A-Z 字符,任何其他字母都必須被洗掉(不允許有空格和制表符,使用下劃線代替),并且字串不能超過 80 個字符。
在我看來,可以這樣做:
name = "hello2 sjsjs- skskSkD"/span>
string = name[0].upper() name[1:>.lower()
lenght = len(string) - 1。
答案=""
for letter in string:
x = letter.isalpha()
if x == False:
answer = string.replace(letter,""/span>)
........
return answer
我認為在這里使用for回圈或isalpha()更好,但我想不出更好的方法。誰能告訴我怎么做呢?
uj5u.com熱心網友回復:
對于字符的一對一和一對N的映射,你可以使用字串的.translate()方法。 字串模塊提供了各種型別的字符的串列(字串),包括一個大寫和小寫的所有字母(string.ascii_letters),但你也可以使用你自己的常量字串,如'abcdef....xyzABC...XYZ'。
import string
def cleanLetters(S)。
nonLetters = S.translate(str.maketrans('',',' string.ascii_letters)
return S.translate(str.maketrans(' '/span>,'_', nonLetters)
輸出:
cleanLetters("hello2 sjsjs- skskskSkD" )
'hello_sjsjs_skskSkD'。
uj5u.com熱心網友回復:
實作這一目標的一種方法是通過內置的re庫使用正則運算式(regex)。這樣就可以只捕獲有效的字符,而忽略其他的字符。
然后,使用基本的字串工具進行替換和大寫,然后在結尾處進行切片。
例如:
例如:
import re
name = 'hello2 sjsjs- skskSkD'/span>
trans = str.maketrans({': '_', ' '。'_'})
''.join(re.findall('[a-zA-Zs ]', name)).translate(trans).capitalize() [:80]
>>> 'Hello_sjsjs_skskskd'
uj5u.com熱心網友回復:
字串是不可改變的,所以每次你做string.replace()的時候,它需要遍歷整個字串來尋找要替換的字符,并且創建一個新的字串。與其這樣做,你可以簡單地迭代當前字串并創建一個新的有效字串列。當你完成了對字串的迭代,使用str.join()來連接它們。
answer_l = [] 。
for letter in string:
if letter == " "/span> or letter == " "/span>:
answer_l.append("_") # 替換空格或制表符為_。
elif letter.isalpha():
answer_l.append(letter) # Use alphabet characters as-is()
# else do nothing[/span]。
answer = "".join(answer_l)
有了string = 'hello2 sjsjs- skskskSkD',我們有了answer = 'hello_sjsjs_skskskSkD';
現在你也可以使用生成器運算式來寫這個,而不是創建整個串列,然后再加入它。首先,我們定義一個函式,為我們的前兩個條件回傳字母或"_",為其他條件回傳一個空字串
def translate(letter)。
if letter == " "/span> or letter == " "/span>:
return "_": return "_"
elif letter.isalpha():
return letter.
else:
return "".
那么,
answer = ""/span>.join(
translate(letter) for letter in string
)
為了執行80個字符的限制,只需采取answer[:80]。由于Python中的分片作業方式,即使answer的長度小于80,也不會出現錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/312043.html
標籤:
