ホームページ  >  記事  >  バックエンド開発  >  Python の組み込み文字列メソッド分析

Python の組み込み文字列メソッド分析

高洛峰
高洛峰オリジナル
2017-03-07 15:48:231494ブラウズ

この記事では主に、概要、文字列の大文字と小文字の変換、文字列形式の出力、文字列の検索、位置決めと置換、文字列の結合と分割、文字列の条件判断、文字列のエンコードなど、Python の組み込み文字列メソッドのいくつかを紹介します

文字列処理は非常に一般的なスキルですが、Python には組み込みの文字列メソッドが多すぎるため、忘れられがちです。簡単に参照できるように、Python 3.5.1 に基づいて各組み込みメソッドの例が作成され、分類されています。これは誰にとってもインデックス付けに便利です。 。

追記: 概要の緑色のタイトルをクリックして、対応するカテゴリに入るか、右側のサイドバーの記事ディレクトリから対応するメソッドにすばやくインデックスを付けることができます。

大文字変換

str.capitalize()

最初の文字を大文字に変換します。最初の文字が大文字でない場合は、元の文字列が返されることに注意してください。

'アディ犬'.capitalize()
# 'アディ犬'

'abcd Xu'.capitalize()
# 'Abcd Xu'

'Xu abcd'.capitalize()
# 'Xu abcd'

'ß'.capitalize()
# 'SS'

str. lower()

文字列を小文字に変換します。これは、ASCII でエンコードされた文字にのみ有効です。

'DOBI'. lower()
# 'dobi'

'ß'. lower() # 'ß' はドイツ語の小文字で、さらに小文字の 'ss' があり、Lower メソッドは変換できません
# 'ß '

'Xu ABCD'. lower()
# 'Xu abcd'

str.casefold()

文字列を小文字に変換します。Unicode エンコーディングの対応する小文字形式はすべて変換されます。

'DOBI'.casefold()
# 'dobi'

'ß'.casefold() #ドイツ語の小文字 ß は小文字 ss に相当し、大文字は SS です
# 'ss'

str.swapcase()

文字列の大文字と小文字を反転します。

'Xu Dobi a123 ß'.swapcase()
#: 'Xu dOBI A123 SS' ここでの ß は SS に変換され、大文字になります
ただし、 s.swapcase().swapcase() であることに注意してください。 == s 必ずしも真ではありません:

u'xb5'
# 'µ'

u'xb5'.swapcase()
# 'Μ'

u'xb5'.swapcase().swapcase()
# ' μ'

hex(ord(u'xb5'.swapcase().swapcase()))
Out[154]: '0x3bc'

ここで、'Μ' (M ではなく mu) の小文字は正確に次のようになります。 「μ」と同じ 書き方は一貫しています。

str.title()

文字列内の各「単語」の最初の文字を大文字にします。 「単語」を判断する基準はスペースと句読点に基づいているため、英語の所有格や一部の大文字略語を書くときに間違いが発生します。

'Hello world'.title()
# 'Hello World'

'中国語 abc def 12gh'.title()
# '中国語 Abc def 12Gh'

# しかし、この方法は完璧ではありません:
「彼ら」 re bill's friends from the UK".title()
# "They're Bill's friends from the Uk"

str.upper()

文字列内のすべての文字を大文字に変換します。これは自動的に無視されます。大文字に変換することはできません。

'中国語 abc def 12gh'.upper()
# '中国語 ABC DEF 12GH'
s.upper().isupper() は必ずしも True ではないことに注意してください。

文字列形式の出力

str.center(width[, fillchar])
指定された長さが文字より短い場合は、指定された幅に従って文字列を中央に配置します。文字列の長さの場合は、元の文字列が返されます。

'12345'.center(10, '*')
# '**12345***'

'12345'.center(10)
# ' 12345 '
str.ljust(width[, fillchar]) ; str.rjust(width[, fillchar])

文字列の内容を左側(右側)に持つ、指定された長さの文字列を返します。塗りつぶしは ASCII スペースで、塗りつぶしは文字列で指定できます。

'ドビ'.ljust(10)
# 'ドビ'

'ドビ'.ljust(10, '~')
# 'ドビ~~~~~~'

'ドビ'.ljust(3, '~')
# 'dobi'

'dobi'.ljust(3)
# 'dobi'
str.zfill(width)

文字列を「0」で埋めて、指定された幅の文字列を返します。

"42".zfill(5)
# '00042'
"-42".zfill(5)
# '-0042'

'dd'.zfill(5)
# '000dd'

'- -'.zfill(5)
# '-000-'

' '.zfill(5)
# '0000 '

''.zfill(5)
# '00000'

'dddddddd'.zfill( 5)
# 'dddddddd'
str.expandtabs(tabsize=8)
隣接する文字列の間隔が指定されたスペース数以内になるように、水平タブ文字を指定されたスペースに置き換えます。

タブ = '1t23t456t7890t1112131415t161718192021'

tab.expandtabs()
# '1 23 456 7890 1112131415 161718192021'
# '12345678123456781234567812345678123 4567812345678'スペースの数と上記の出力位置

tab.expandtabs(4)
# '1 23 456 7890 1112131415 161718192021'
# '12341234123412341234123412341234'
str.format(^args, ^^kwargs)

公式ドキュメントにはすでに多くの構文があります。さらに詳しい例はありますが、ここでは例を書きません。もっと詳しく知りたい子供用の靴は、ここをクリックして直接アクセスしてください。 形式の例。

str.format_map(mapping)

はstr.format(*args, **kwargs)に似ていますが、違いはマッピングが辞書オブジェクトであることです。 。

People = {'name':'john', 'age':56}

'私の名前は {name}、私は {age} 歳です'.format_map(People)
# '私の名前はジョンです、私am 56 old'

文字列の検索、位置決め、置換

str.count(sub[, start[, end]])
text = '外側の保護カバー'

text.count('e')
# 4

text.count('e', 5, 11)
# 1

text.count('e', 5, 10)
# 0
str.find(sub[, start[, end]]) ; str.rfind(sub[, start[, end]])
text = '外側の保護カバー'

text.find('er')
# 3

text.find('to')
# -1

text.find('er', 3)
Out[121]: 3

text.find('er', 4)
Out[122]: 20

text.find('er', 4, 21)
Out[123]: -1

text.find('er', 4, 22)
Out[124]: 20

text.rfind('er')
Out[125]: 20

text.rfind('er', 20)
Out[126]: 20

text.rfind('er', 20, 21)
Out[129]: -1
str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]])
find() rfind() と似ていますが、見つからない場合は ValueError が発生する点が異なります。

str.replace(old, new[, count])
'犬ワウワウジャオ'.replace('wow', 'ワン')
# '犬ワンワンジャオ'

'犬ワウワウジャオ'.replace ('wow', 'wang', 1)
# '犬ワンワンジアオ'

'犬ワンワンワンジアオ'.replace('wow', 'ワン', 0)
# '犬ワンワンワンジアオ'

'犬ワウワウジャオ'.replace('wow', '王', 2)
# '犬ワンワンジャオ'

'犬ワウワウジャオ'.replace('wow', '王', 3)
# '犬王王暁'
str.lstrip([chars]); str.rstrip([chars])
' dobi'.lstrip()
# 'dobi'
'db。 kun.ac.cn'.lstrip('dbk')
# '.kun.ac.cn'

' dobi '.rstrip()
# ' dobi'
'db.kun.ac.cn'.rstrip( 'acn')
# 'db.kun.ac.'

' dobi '.strip()
# 'dobi'
'db.kun.ac.cn'.strip('db.c')
# ' kun.ac.cn'
'db.kun.ac.cn'.strip('cbd.un')
# 'kun.a'
static str.maketrans(x[, y[, z]]); .translate(table)
maktrans は、translate で使用する比較テーブルを生成するために使用される静的メソッドです。
maktrans にパラメータが 1 つしかない場合、パラメータは辞書である必要があります。辞書のキーは Unicode エンコード (整数) または長さ 1 の文字列のいずれかです。辞書の値は、任意の文字列、None、または Unicode エンコードにすることができます。 。

a = 'ドビ'
ord('o')
# 111

ord('a')
# 97

hex(ord('dog'))
# '0x72d7'

b = {' d':'dobi', 111:' は ', 'b':97, 'i':'u72d7u72d7'}
table = str.maketrans(b)

a.translate(table)
# 'dobi はDog'

maktrans に 2 つのパラメータがある場合、2 つのパラメータはマッピングを形成し、2 つの文字列は同じ長さでなければなりません。3 番目のパラメータがある場合は、3 番目のパラメータも文字列である必要があり、文字列は自動的に文字列になります。 None にマッピング:

a = 'dobi は犬'

table = str.maketrans('dobi', 'alph')

a.translate(table)
# 'alph hs a alg'

table = str.maketrans('dobi', 'alph', 'o')

a.translate(table)
# 'aph hs a ag'

文字列の結合と分割

str.join( iterable)

指定された文字列を使用して、要素が文字列である反復可能なオブジェクトを接続します。

'-'.join(['2012', '3', '12'])
# '2012-3-12'

'-'.join([2012, 3, 12])
# TypeError : シーケンス項目 0: 期待される str インスタンス、int が見つかりました

'-'.join(['2012', '3', b'12']) #bytes は文字列ではありません
# TypeError: シーケンス項目 2: 期待される strインスタンス、バイトが見つかりました

'-'.join(['2012'])
# '2012'

'-'.join([])
# ''

'-'.join([None])
# TypeError: sequence item 0: 期待される str インスタンス、NoneType が見つかりました

'-'.join([''])
# ''

','.join({'dobi':'dog', 'polly':'bird' })
# 'dobi,polly'

','.join({'dobi':'dog', 'polly':'bird'}.values())
# 'dog,bird'
str.partition (9月); str.rpartition(sep)
'犬ワウワウジャオ'.partition('wow')
# ('犬', 'ワウ', 'ワウジャオ')

'犬ワウワウジャオ'.partition('犬' )
# ('', '犬', ' wow wow jiao')

'dog wow wow jiao'.partition('jiao')
# (' 犬 wow wow ', 'jiao', '')

'犬ワウワウジャオ'.partition('ww')
# ('犬ワウワウジャオ', '', '')


'犬ワウワウジャオ'.rpartition('wow')
Out[ 131]: ('犬 wow ', 'wow', ' jiao')

'dog wow wow jiao'.rpartition('dog')
Out[132]: ('', 'dog', ' wow wow jiao' ')

'犬 wow wow jiao'.rpartition('jiao')
Out[133]: ('dog wow wow ', 'jiao', '')

'犬 wow wow jiao'.rpartition('ww ')
Out[135]: ('', '', '犬ワウワウジャオ')
str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)
'1,2,3'.split(','), '1, 2, 3'.rsplit()
# (['1', '2 ', '3'], ['1,', '2,', '3'])

'1,2,3'.split(',', maxsplit=1), '1,2,3 '.rsplit(',', maxsplit=1)
# (['1', '2,3'], ['1,2', '3'])

'1 2 3'.split() , '1 2 3'.rsplit()
# (['1', '2', '3'], ['1', '2', '3'])

'1 2 3'.split (maxsplit=1), '1 2 3'.rsplit(maxsplit=1)
# (['1', '2 3'], ['1 2', '3'])

' 1 2 3 ' .split()
# ['1', '2', '3']

'1,2,,3,'.split(','), '1,2,,3,'.rsplit( ',')
# (['1', '2', '', '3', ''], ['1', '2', '', '3', ''])

' '.split()
# []
''.split('a')
# ['']
'bcd'.split('a')
# ['bcd']
'bcd'.split( None)
# ['bcd']
str.splitlines([keepends])

文字列行界符は分間隔拆分範囲列表;当keependsはTrue、拆分後保持行界符、能被

'ab cnnde fgrklrn'.splitlines()
# ['ab c', '', 'de fg', 'kl']
'ab cnnde fgrklrn'.splitlines(keepends =True)
# ['ab cn', 'n', 'de fgr', 'klrn']

"".splitlines(), ''.split('n') #注意两者的区别
# ([], [''])
"One linen".splitlines()
# (['One line'], ['Two Lines', ''])

字符串条件判断

str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]])
text = '外側保護カバー'

text.endswith('ing')
# True

text.endswith(('gin', 'ing') )
# True
text.endswith('ter', 2, 5)
# True

text.endswith('ter', 2, 4)
# False

str.isalnum()

文字列と数字の任意の組み合わせ、つまり真、简言之:

ただ要 c.isalpha(), c.isdecimal(), c.isdigit(), c.isnumeric() 中のいずれか 1 つは真、则c.isalnum() は真。 isalnum()

# True


'dobi_123'.isalnum()

# False


'dobi 123'.isalnum()

# False


'%'.isalnum()

# False

str.isalpha()
Unicode 文字記号データベース内では、「Letter」(これらの文字には通常、「Lm」、「Lt」、「Lu」、「Ll」、「Lo」などの記号があり、アルファベットとは異なります)として扱われ、いずれも真です。 '.isalpha()

# True


'do bi'.isalpha()

# False


'dobi123'.isalpha()

# False


'徐'.isalpha()
# True
str.isdecmal( ); str.isdigital(); str.isnumeric()

3 つのメソッドの領域は、Unicode 通用の真對判断にあります:


is10 進数: Nd,

isdigit: No, Nd,

isnumeric: No, Nd, Nl

数字と 10 進数の違いは、一部の数値文字列は数字であっても 10 進数ではないことです。詳細については、ここをクリックしてください

num = 'u2155'
print(num)
# ⅕
num.isdecimal(), num.isdigit(), num .isnumeric()
# (False、False、True)

num = 'u00B2'
print(num)
# ²
num.isdecimal(), num.isdigit(), num.isnumeric()
# ( False、True、True)

num = "1" #unicode
num.isdecimal()、num.isdigit()、num.isnumeric()
# (Ture、True、True)

num = "'Ⅶ' "
num.isdecimal(), num.isdigital(), num.isnumeric()
# (False, False, True)

num = "十"
num.isdecimal(), num.isdigital(), num. isnumeric ()
# (False、False、True)

num = b"1" # byte
num.isdigital() # True
num.isdecmal() # AttributeError 'bytes' オブジェクトには属性 'isdecmal' がありません
num . isnumeric() # AttributeError 'bytes' オブジェクトには属性 'isnumeric' がありません
str.isidentifier()

文字列が有効な識別子であるかどうかを判断します。

'def'.isidentifier()
# True

'with'.isidentifier()
# True

'false'.isidentifier()
# True

'dobi_123'.isidentifier()
# True

'dobi 123'.isidentifier()
# False

'123'.isidentifier()
# False
str.is lower()
'Xu'.is lower()
# False

'ß'.is lower() #ドイツ語の大文字
# False

'aXu'.is lower()
# True

'ss'.is lower()
# True

'23'.is lower()
# False

'Ab'。 ()
# False

str.isprintable()

は、文字列のすべての文字が印刷可能な文字であるか、文字列が空であるかを決定します。 Unicode 文字セットの「その他」および「区切り文字」カテゴリの文字は、印刷不可能な文字です (ただし、ASCII スペース (0x20) は含まれません)。

'dobi123'.isprintable()
# True

'dobi123n'.isprintable()
Out[24]: False

'dobi 123'.isprintable()
# True

'dobi.123'.isprintable ()
# True

''.isprintable()
# True

str.isspace()

は、文字列内に少なくとも 1 つの文字があり、すべての文字が空白文字であるかどうかを判断します。

In [29]: 'rnt'.isspace()
Out[29]: True

In [30]: ''.isspace()
Out[30]: False

In [31]: ' ' .isspace()
Out[31]: True

str.istitle()

は、文字列内の文字が大文字かどうかを決定し、アルファベット以外の文字を無視します。

'Python の仕組み'.istitle()
# True

'Python の仕組み'.istitle()
# False

'Python の仕組み'.istitle()
# False

'Python の仕組み'。 istitle()
# True

' '.istitle()
# False

''.istitle()
# False

'A'.istitle()
# True

'a'.istitle()
# False

'貂蝉 Abc Def 123'.istitle()
# True
str.isupper()
'Xu'.isupper()
# False

'DOBI'.isupper()
Out[41]: True

'Dobi'.isupper()
# False

'DOBI123'.isupper()
# True

'DOBI 123'.isupper()
# True

'DOBIt 123'.isupper()
# True

'DOBI_123'.isupper()
# True

'_123'.isupper()
# False

文字列エンコーディング

str.encode(encoding="utf-8",errors= "strict ")

fname = 'Xu'

fname.encode('ascii')
# UnicodeEncodeError: 'ascii' コーデックは文字 'u5f90' をエンコードできません...

fname.encode('ascii' , ' replace')
# b'?'

fname.encode('ascii', 'ignore')
# b''

fname.encode('ascii', 'xmlcharrefreplace')
# b'Xu'

fname.encode('ascii', 'backslashreplace')
# b'\u5f90'

Python の組み込み文字列メソッド分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。