Python3: str型のメソッド 分類別一覧

# はじめに
公式リファレンスの組み込みメソッド一覧は基本的にアルファベット順に並んでいますよね。
それが初学者の私には少し見づらかったので、ざっくりと分類ごと(？)にまとめてみました。

本記事はサンプルコードがほとんどで、細かい説明はしていません。
また、一部載せていないメソッドもあります。詳しくはリファレンスを確認してください。

# 公式
https://docs.python.org/ja/3.6/library/stdtypes.html#str

# メソッド分類
## 分類1：大文字小文字 系 (引数:なし)
```py
'hello world'.capitalize() # 'Hello world'
'hello world'.title()      # 'Hello World'
'hello world'.upper()      # 'HELLO WORLD'
'HELLO WORLD'.lower()      # 'hello world'
'HELLO world'.swapcase()   # 'hello WORLD'
```

## 分類2：部分文字列 系(引数：sub)
```py
# 含まれる？
'a' in 'abc' # True
'z' in 'abc' # False

# 出現回数
str.count(sub[, start[, end]])
'aba'.count('a') # 2
'abcdef'.count('abc') # 1

# 最初に出現するインデックス
str.find(sub[, start[, end]])
'Hello, world'.find('o') # 4
'Hello, world'.find('x') # -1

str.index(sub[, start[, end]])
'Hello, world'.index('o') # 4
'Hello, world'.index('x') # ValueError <- findとの違い

# 最後に出現するインデックス
str.rfind(sub[, start[, end]])
'Hello, world'.find('o') # 8
'Hello, world'.find('x') # -1

str.rindex(sub[, start[, end]])
'Hello, world'.index('o') # 8
'Hello, world'.index('x') # ValueError <- findとの違い

# prefixで始まってる？(タプルで複数指定可)
str.startswith(prefix[, start[, end]])
'Hello, world'.startswith('H') # True
'Hello, world'.startswith(('HELLO', 'Hello', 'hello')) # True

# suffixで終わってる？(タプルで複数指定可)
str.endswith(suffix[, start[, end]])
'Hello, world'.endswith('d') # True
'Hello, world'.endswith(('WORLD', 'World', 'world')) # True
```

## 分類3：長さ調節? 系(引数:width)
- width が len(s) 以下なら元の文字列が返される

```py
# 中央寄せ
str.center(width[, fillchar])
'abc'.center(5)      # ' aaa '
'abc'.center(5, '-') # '-aaa-'

# 左寄せ
str.ljust(width[, fillchar])
'abc'.ljust(5, '-')  # 'abc--'

# 右寄せ
str.rjust(width[, fillchar])
'abc'.rjust(5, '-')  # '--abc'

# 0パディング
str.zfill(width)
"42".zfill(5)  # '00042'
"+42".zfill(5) # '+0042'
"-42".zfill(5) # '-0042'
```



## 分類4：is 系(引数：なし)
```py
# 大文字？ 小文字？
str.islower()
str.isupper()
str.istitle()

# どんな種類の文字?
str.isalpha()
str.isdecimal()
str.isnumeric()
str.isspace()
```

## 分類5：除去 系(引数：chars)
- 引数charsは除去される文字集合を指定する文字列

```py
# 左右から
str.strip([chars])
'  spacious  '.strip() # -> 'spacious'
'www.example.com'.strip('cmowz.') # 'example'

# 左から
str.lstrip([chars])
'  spacious  '.lstrip() # -> 'spacious  '
'www.example.com'.lstrip('cmowz.') # 'example.com'

# 右から
str.rstrip([chars])
'  spacious  '.rstrip() # '  spacious'
'mississippi'.rstrip('ipz') # 'mississ'
```

## 分類6：分割 系(引数：sep)

```py
# --リストに分割----------------------

# 最初の出現位置で分割 sepは消える
str.split(sep=None, maxsplit=-1)
'1,2,3'.split(',') # ['1', '2', '3']
'1,2,3'.split(',', maxsplit=1) # ['1', '2,3']

# 最後の出現位置で分割 sepは消える
str.rsplit(sep=None, maxsplit=-1)
'1,2,3'.rsplit(',') # ['1', '2', '3']
'1,2,3'.rsplit(',', maxsplit=1) # ['1,2', '3']

# 改行で分割(\n, \r, \r\n, \v, \fなど多くに対応)
str.splitlines([keepends])
'ab c\n\nde fg\rkl\r\n'.splitlines() # ['ab c', '', 'de fg', 'kl']

# --タプルに分割--------------------

# 最初の出現位置で分割 sepは消えない
str.partition(sep)
'a-b-c'.partition('-') # ('a', '-', 'b-c')
'a-b-c'.partition('x') # ('a-b-c', '', '')

# 最後の出現位置で分割 sepは消えない
str.rpartition(sep)
'a-b-c'.rpartition('-') # ('a-b', '-', 'c')
'a-b-c'.rpartition('x') # ('a-b-c', '', '')
```


## 分類7：結合 系(引数：iterable)
```py
str.join(iterable)
'-'.join(['a', 'b', 'c']) # 'a-b-c'
'-'.join(('a', 'b', 'c')) # 'a-b-c'
'-'.join('abc')           # 'a-b-c'
```

## 分類8：置換 系(引数：old, new またはtable)
```py
# 複数(単一)文字の換字(1パターン)
str.replace(old, new[, count])
'Hi, Alice'.replace('Alice', 'Bob') # 'Hi, Bob'
'aaaaaa'.replace('a', 'A', 3) # 'AAAaaa'

# 単一文字の換字(複数パターン)
table = str.maketrans({
    'a': '1',
    'b': None,
    'c': 'three',
    'd': None,
    'e': 'FIVE',
})
'abcde'.translate(table) # 1threeFIVE
```

# おわりに
やっぱりアルファベット順じゃなく分類別(?)にまとめられていた方が、さらっと全体を見返すのにはいいかも。