適当のごった煮

Pythonと境界標とQGISを中心にいろいろと

文字列関係

スポンサードリンク

Python ドキュメントより自分用の抜粋。

文字列メソッド

操作内容表現
部分文字列の出現回数をカウント str.count(sub[, start[, end]])
部分文字列の位置走査 str.find(sub[, start[, end]])
# 見つからなければ-1
部分文字列の位置走査 str.index(sub[, start[, end]])
# 見つからなければエラー
右揃えした文字列を返す str.rjust(width[, fillchar])
# widthが元の文字列以下だと文字列をそのまま返す
指定文字で区切った単語リストを返す str.split(sep=None, maxsplit=-1)
文頭と文末の削除 str.strip([chars])
指定文字の置換 str.replace(old, new[, count]) # countで置換回数指定
文字列が英字や数字の特定条件に合致するか str.is---()

find() メソッドは、部分文字列の位置を知りたいときにのみ使い、部分文字列であるかどうかのみを調べるには、in演算子を使う。

find, index, just, split, strip は右からか左からかの違いを持つメソッド(名前に「r」か「l」がつく)がある。

正規表現(reモジュール)

reモジュールの使い方

reモジュールを使って文字列を検索する方法は、reが持っているメソッドを使う方法と正規表現オブジェクトを使う方法の二通りがある。何回も同じパターンで検索する場合は、パターンをコンパイルする後者の方法が効率的なようです。

reモジュールのメソッドを使う
操作内容表現
パターンを検索
マッチオブジェクトを返す(マッチしなければNone)
re.search(pattern, string, flags=0)
# re.matchは文頭だけを検索
パターンで置換 re.sub(pattern, repl, string, count=0, flags=0)
マッチした文字列リストを返す(マッチしなければ空リスト) re.findall(pattern, string, flags=0)
コンパイルして正規表現オブジェクトを使う
操作内容表現
パターンをコンパイル
正規表現オブジェクトを返す
regex = re.compile(pattern, flags=0)
パターンを検索
マッチオブジェクトを返す(マッチしなければNone)
regex.search(string[, pos[, endpos]])
# 「regex.match」は文頭だけを検索
マッチした文字列リストを返す(マッチしなければ空リスト) regex.findall(string[, pos[, endpos]])
マッチオブジェクトのメソッド
操作内容表現
マッチした部分を表示
正規表現で()を使った部分ごとに表示
match.group([group1, ...])
# match.groups()はタプルで分けて表示

文字を表す正規表現

表現意味
\s 空白
\S 空白ではない
\d 数字
\D 数字ではない
\w 英数字
\W 英数字ではない
\A 文字列の先頭
\Z 文字列の末尾

メタ文字を表す正規表現

表現意味
^ 行頭
$ 行末
. 任意の一文字
\ エスケープ
() まとめる
\ いずれか

繰り返しを表す正規表現

表現意味
* 0回以上
+ 1回以上
? 0または1
.*? 最小範囲
{a} a回
{a,} a回以上
{a, b} a~b回
使用例
>>> import re
>>> test = '1abcdefg2hijklmn3opqrstu4vwxyz5'
>>> mobj = re.search('(\d\w).*?(\d\w)', test)
>>> mobj.groups()
('1a', '2h')
>>> re.findall('\d\w', test)
['1a', '2h', '3o', '4v']
>>>