おさかなさんの覚え書き
POST: 2020-02-14 / UPDATED: 2020-03-04

python-guide

Python3

環境構築

Xcodeのインストールができる場合(Mac)

check

python3 --versionをMacのターミナルに打ってEnter[1]Python3 3.x(現在のversion)と出れば、既にインストールできています。-bash: Python3: command not foundと出てくる場合以降の手順に従ってください。

1

App Storeを開き、Xcodeをインストールします(時間がかかります)

2

インストールできたら、今度は羽のマークのwishをクリックします。するとwishが開くので、consoleに切り替えxcode-select --installを入力してEnter。ログが流れてきて止まったところで再度Enter[1:1]。表示が100%になったら成功です。これでCommand Line Toolsがインストールできました。

3

Homebrewをインストールします。/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"をconsoleに貼り付けて実行してください。

4

consoleでbrew install python3を実行して終了です。

Xcodeのインストールができない、あるいはWindowsで環境構築しようとしている

1

こちらがMac用のインストールページです。Windowsを選択すればWindows用のPython3がインストールできます。

2

インストール出来たらPython3のセットアップをして終了です。

VScodeなどのエディタを所持していない場合

1

Visual Studio Code のインストール(Mac版)

2

利用規約などに一通り目を通してNextを押すだけで大丈夫です。特にインストール先のディレクトリ[2]を指定したい訳でないのなら、最後までそのまま進められます。

これで一通りの準備は終わりです。お疲れ様でした。

Python3でプログラムを実行する

.pyの拡張子がついたファイルを作成する

新規ファイル→名前をつけて保存で拡張子に.pyをつけてください。名前をつけて保存、の時点ででてくる名前の末尾です。

プログラムを終了させる

基本的にPython3プログラムはpython3 ファイル名.pyで実行します。何らかの要因で終了させられない場合はexit()を使ってください。

また、どうしても正常な手順で終了させられないときはVScode又は実行元のターミナル自体を強制終了してください。(非推奨)

実行前に必ずファイルを保存(command & Sキーでも可)すること。同じファイルで様々なプログラムを試しに実行してみる時、定義した変数や関数などが干渉して思うような動作をしなかったり、エラーが出てしまうことがあります。

もし同じファイルの中でいくつかのプログラムを個別にテストしたいのなら、前回書いたコードを一度消して新しく書くようにしてください。

基礎の処理

標準出力と標準入力

標準出力であるprint()と、標準入力を受け付けるinput()を使ったプログラムの一例として以下を示します。

# オウム返しのプログラム
print(input("input: "))

実行するとinput:が出力されるので、適当な文字列を入力して

すると、input:が出力された行の下に自身が入力した文字が出力されました。

print()()内の要素をターミナルに出力する(書き出す)関数であり、前述のコードを実行した場合ではinput("input: ")で受け付けた入力をそのまま出力しています。

input()は入力を受け取る関数であるため、input("文字列")と書けば、ターミナル上に文字列を出して入力を受け付けてくれる、ということです。

input()のみでは標準入力を文字列表示なしで受け取ることもできます。ターミナル上に文字列を出力させない時に使ってみてください。

追記

一つのinput()で受け取れるのは、一行の入力のみです。

もし入力フォーマット[3]が一行にs1 s2の半角スペース区切りのものであれば、print(input()+input())のようなコードは使えません。入力が二行あることを想定しているのに、求められた二行目行が存在しないためエラーが出てしまいます。

入力フォーマットが一行にs1 s2の半角スペース区切りで、求める出力がs1 s2なのだとすれば、必要なコードはprint(''.join(input().split()))となります。''.join()がどのようなものなのかは文字列とリストを参照してください。

文字列と数値 - str(), int(), float()

人間は数字を全角半角関係なしに扱うことができます。しかしプログラムは基本的にうまく処理できません。[4]

文字列と数値をPython3でどのように扱うかを解説します。

試しに下記のコードを実行してみてください。

string = "12"
integer = 8
print(string+integer)
print(int(string)+integer)
print(string+str(integer))
print(string>integer)
print(int(string)>integer)
print(string==string)
print(string!=string)

TypeError: Can't convert 'int' object to str implicitly
20
128
TypeError: unorderable types: str() > int()
True # 12は8より大きいので、Trueが出力される
True # 文字列12は文字列12と一致しているので、Trueが出力される
False # 文字列12は文字列12と一致しているため、!=が表す不一致の条件には当てはまらないので、Falseが出力される

出力の解説

一行目:str型とint型は計算したり繋げることができないためエラーが出力されます。

二行目:int()関数で半角英数字の12をint型に変換したためエラーは出ず、12+8の結果を出力できました。

三行目:str()関数で半角英数字の8をstr型に変換し、文字列と文字列を繋げて出力しました。str()()内に入れた数値をstr型に変換することができます。

四行目:str型とint型では比較ができないので、エラーが出力されました。

五行目:int()()内に入れた変数(半角数字の文字列が代入されている)や文字列(半角数字)をint型に変換することができ、また、浮動小数点数も整数にしてくれます。

float()()内に入れた変数(半角数字)や数値、文字列(半角数字)を小数を保ったままfloat型に変換することができ、小数点以下が存在しない文字列、数値、変数などは.0を末尾に追加します。

複数行の文字列を扱う

改行したい時、複数行の文字列を一つの変数に格納したい時などにつかえるのが以下の方法です。

"""文字列。複数行、改行も可能(ただし内部に"が存在しないこと)"""

内部に"を入れたい時は""""""で挟むのかわりに''''''で挟むことも可能。
また、\nという制御文字を以下のように挟むことで複数行の再現をすることも可能です。

print('テストです\nおはようございます')

テストです
おはようございます

変数

以下のコードを実行し、ターミナルに半角数字を入力してください。

# nはこの例では整数かつ半角英数字の5とします。
n = int(input())
if n > 9:
    print(str(n) + "は10より大きいです")
else:
    print(str(n) + "は9以下です")

5は9以下です

入力が9以下なら(入れた数字)は9以下ですと出力され、入力が10以上であれば(入れた数字)は10より大きいです`と出力されるはずです。
ここで利用しているのはif文と呼ばれる条件文です。

コードの解説

一行目:input()で受け付けた文字列をint()()内に入れることで数値に直します。これを、左辺の変数nに=の代入演算子を使って代入。(変数nは入力された数値である、とされました。)

二、四行目: 条件によって実行させるプログラムを切り替えています。

三、五行目: その中で、str(n)+"は10より大きいです"str(n)+"は9以下です"となる理由を以下で解説します。

n+"は10より大きいです"のようにstr型はint型と結合させようとするとエラーが出てしまいます。数値と文字の計算や結合は不可能だからです。

でも、数値同士は足し算でき、文字列同士なら結合が可能です。だからstr(n)nを文字列に変える必要がありました。

変数の定義方法:変数名 = 代入するもの

以下の例としてn=2かつ実行するプログラムはprint(n)とする

足し算:n+=4
引き算:n-=4
掛け算:n*=4
割り算:n/=4
剰余 :n%=4 # n=2%4
除算 :n//=4 # n=2//4
累乗 :n**=4 # n=2**4

6
-2
8
0.5
2
0
16

int型以外への掛け算

print("|123|"*5)
print((1,2,3)*5)
print([1,2,3]*5)

|123||123||123||123||123|
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

かけられた数だけ繰り返された要素が結合する。

if文 - if, elif, else

設定した条件によって実行内容を変えることができます。

n = int(input("number: "))
if n > 9:
    print(str(n)+"は10以上です")
elif n >4:
    print(str(n)+"は5以上9以下です")
else:
    print(str(n)+"は4以下です")

コードの解説

一行目:変数nint(input("number: "))で受け取った数値を代入

二行目:if。これはif文の先頭にのみ必要とされるもので、二つ目以降の条件分岐はelifelseを使う。単体で使用可能。

四行目:elif。これは先述どおり二つ目以降の条件分岐に使われるもので、複数の条件分岐を用いる際に重宝する。単品では使用不可。

六行目:else。最後尾にのみ使用可能。ifelifの条件全てに一致しなかった時だけelseの内容が実行される。単品では使用不可。

インデント(Tab)の高さが同じでなければ作動しない。

※失敗、成功例共に入力は整数かつ半角英数字の5としています

失敗例

n = int(input("number: "))
if n > 9:
    print(str(n) + "は10以上です")
elif n > 4:
print(str(n) + "は5以上9以下です")
else:
    print(str(n) + "は4以下です")

File "Main.py", line 5
print(str(n) + "は5以上9以下です")
   ^
IndentationError: expected an indented block

成功例

n = int(input("number: "))
if n > 9:
    print(str(n) + "は10以上です")
elif n > 4:
    print(str(n) + "は5以上9以下です")
else:
    print(str(n) + "は4以下です")

5は4以下です

失敗例ではelifとそれに追随するprint()文のタブが一つ多いです。

失敗例で実行されるのは10以上かそれ以外かの判断がifelseのみで行われ、次に実行されるのは5以上か。elseでは5以上かそれ以外かの判断ができないようになってしまっている状態で、修正する必要があります。

文字列とリスト - .split(), ''.join(), list()

文字列からリストへの変換、リストから文字列への変換

s = "abcdefg"
print(s.split())
print(s.split('d'))
print(''.join(s))
print('/'.join(s))
print(list(s))

["abcdefg"]
["abc","efg"]
abcdefg
a/b/c/d/e/f/g
['a', 'b', 'c', 'd', 'e', 'f', 'g']

出力の解説

一行目:区切るものが指定されていないので、区切らないまま文字列がリストに格納された。
二行目:‘d’を区切りにしたため、‘d’は消え、該当位置で区切られた文字列が別々にリストに格納された。
三行目:''という空の文字列で結合させたので、変数sとなんら変わりのない文字列が出力される。
四行目:’/’(スラッシュ)で結合させたので、隙間に/が入った文字列になる。
五行目:list()()内に入っている文字列を一文字ごとに区切ってリスト化してくれる関数。

複雑な処理

文字列操作

.format()

print("私は朝{0}時に{1}します".format(6,"起床"))

私は朝6時に起床します

.format()は文字列の内部に()内の文字を挿入できる関数です。{}内のナンバーは()内のカンマ区切りの順番を指していて、これで順序を変えることもできます。

f""

f""はPython3.6以降でのみ使えます。

print(f"私は朝{6}時に{"起床"}します")

.format()よりスマートで冗長でない書き方ですね。

[数値]

s = "abcdefg"
print(s[0])
print(s[3])

[数値]では、リストとおなじく一番先頭が0その次が1となっています。文字列[数値]とすれば、存在している限りでその位置に値する文字列を返してくれます。

"abcdefg"が格納されている変数sに対して[0]を指定しaを取り出しました。dは一般的な数え方では先頭から4番目ですが、Pythonでは3番目となります。

[-1]とすると、末尾から一つ目の文字が取得されます。この例では"g"が対応しています。

[数値:]

s = "abcdefg"
print(s[0:])
print(s[3:])

abcdefg
defg

[n:]nから末尾までを指定できる。

二行目の[n:]ではn=0です。ここでは[n1:n2]のように終点が指定されていないので、文字列の末尾まで指定されます。s[0]に該当するaから文字列の末尾まで、つまりはabcdefgが出力されることになります。

三行目の[n:]ではn=3です。このときs[n]に該当するdから末尾までを指定しているため、defgが出力されます。

[:n]

s = "abcdefg"
print(s[:3])
print(s[:-1])

abc
abcdef

[:n]は先頭からn未満までを指定できる。

二行目はn=3なので0から3未満、つまりabcが対象。

三行目ではn=-1である。指定が-nの時は末尾から指定されるのでabcdefが対象となる。

[n1:n2]

len()

print(len("banana"))

6

()内に入れた文字列の長さをカウントしてくれる。リストと違って一番先頭が1から始まるものであることに注意。

リストや辞書型にも同じように使えるので、汎用性の高い関数と言える。

.upper()

print("Banana".upper())

BANANA

.upper().直前に文字列、または文字列の入った変数を置くとその場で文字列(アルファベットなど)全てを大文字にした結果を返してくれます。

ただし元の変数には影響を与えないものなので元の変数に結果を返したいときは変数 = 変数.upper()としなければいけません。

.lower()

print("Banana".lower())

banana

.lower().直前に文字列、または文字列の入った変数を置くとその場で文字列(アルファベットなど)全てを小文字にした結果を返してくれます。

注意事項は.upper()と同じです。

.swapcase()

print("Banana".swapcase())

bANANA

.swapcase().の直前に文字列、または文字列の入った変数を置くとその場で文字列(アルファベットなど)が小文字なら大文字に、大文字なら小文字へと変換した結果を返してくれます。

.capitalize()

print("banana apple".capitalize())

Banana apple

.capitalize()では.の直前に置かれた文字列、または文字列の入った変数を置くことでその場で文字列(アルファベットなど)の先頭を大文字にしてくれます。

.title()

print("banana apple".title())

Banana Apple

.title().の直前に文字列または文字列の入った変数を置くと、その場で文字列(アルファベットなど)の単語の先頭のみを大文字に変換した結果を返してくれます。

リスト操作

.append(), +=

lists = ["banana","apple","kiwi"]
lists.append("orange")
print(lists)
lists+=["grape"]
print(lists)

[‘banana’, ‘apple’, ‘kiwi’, 'orange']
[‘banana’, ‘apple’, ‘kiwi’, ‘orange’, ‘grape’]

.append()では.の前にリストが入っている変数またはリストを置き、()内にリスト末尾に追加したい要素を入れることで追加することができる。
+=[要素]を追加するやり方は、.append()と同じくリスト末尾に追加する効果がある。

.appendはあくまで追加なので、.append(["orange"])などとすると

[‘banana’, ‘apple’, ‘kiwi’, ['orange']]

となってしまいます。

.extend()

lists = ["banana","apple","kiwi"]
lists2 = ["orange","grape"]
lists.extend(lists2)
print(lists)

['banana', 'apple', 'kiwi', 'orange', 'grape']

.extend()では.の前にリストが入っている変数またはリストを置き、()内にリスト末尾に連結したいリストをいれることで連結できる。

注意:破壊的操作のため['banana', 'apple', 'kiwi']+['orange', 'grape']と同じくリスト同士の連結はできますが、.append()のように直接要素をいれるとエラーが出ます。リスト型以外の連結は不可能です。

.insert()

lists = ["banana","apple","kiwi","orange"]
lists.insert(1,"grape")
print(lists)

[‘banana’, 'grape', ‘apple’, ‘kiwi’, ‘orange’]

del

lists = ["banana","apple","kiwi","orange","grape"]
del lists[2]
print(lists)

[‘banana’, ‘apple’, ‘orange’, ‘grape’]

del リスト[削除したい要素のオフセット]でリスト内要素の削除が可能。

.remove()

lists = ["banana","apple","kiwi","orange","grape"]
lists.remove("apple")
print(lists)

[‘banana’, ‘kiwi’, ‘orange’, ‘grape’]

リスト.remove(削除したい要素)で削除が可能。オフセットがわからない時、場所はどうでもいいときなどに使うことができる。ただし、処理するリストの先頭から初めて見つけた削除したい要素と一致しているものを一つ消すのみなので、複数消したい時は.count()やfor文をお勧めします。

.pop()

lists = ["banana","apple","kiwi","orange","grape"]
lists.pop(2)
print(lists)

[‘banana’, ‘apple’, ‘orange’, ‘grape’]

リスト.pop(削除したい要素のオフセット)でリストに格納された要素を取り出す。delと違いlists.pop(削除したい要素のオフセット)では要素を取り出し元のリストから消す形なので、変数などに代入することも可能。

.sort()

lists = [10,9,8,7,6,5,4,3,2,1]
lists.sort()
print(lists)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

lists.sort(_option)で指定されたlistsを小さい順に並べ替え。対象が数値なら0,1,2…nと続いていく。文字列(アルファベットなど)の場合はa,b,c…と続いて行く。

.reverse()

lists = [10,9,8,7,100,5,4,3,2,1]
lists.reverse()
print(lists)

[1, 2, 3, 4, 5, 100, 7, 8, 9, 10]

100が途中に入っていることからわかるように、この関数はリストを単純に反転させる。.sort()と組み合わせると強い。

lists.reverse()

.index()

lists = ["apple","blueberry","orange","grapefruit","kiwi"]
result = lists.index("blueberry")
print(result)

1

index()lists.index(object)objectが存在する位置を探せる。

.count()

lists = ['apple','apple','orange','grapefruit','kiwi']
result = lists.count('apple')
print(result)

2

.countlists.count(object)objectが何個含まれているかを数えられる。

リスト内包表記

リスト内包表記を使うと一行で処理するワンライナーも実行しやすくなり、.append()を毎回呼び出さないため速く動くプログラムが作れます。

ifのみの処理

lists = ['i==0' for i in range(3) if i==0]
print(lists)

['i==0']

辞書操作

{'key': 'value'}といった構図のデータです。

dictionary = {'key1': 0, 'key2': 1}
print(dictionary)

{'key2': 1, 'key1': 0}

そのまま出力しても辞書型は辞書型として出てきます。
順序が逆になっていることで気づいたかもしれませんが、辞書型は順番を維持してくれません。

dictionary = {'key2': 1, 'key1': 0}
print(dictionary['key1'])

0

keyは常に文字列でなければいけません。特定のkeyのvalueを確認したい時にはdictionary[key]で対応するvalueを呼び出すことができます。

存在しない場合にはエラーが出るので注意。

ここである疑問が生まれた方もいるはずです。結論から言えば同じkeyで重複させたディクショナリーprint({'key1': 0, 'key1': 1})を実行したところ出力は{'key1': 1}となり、順番を変えた時にはvalueが0になっていました。検証した範囲では、keyが重複するとき(かつ変数に入れず直接出力した場合)は後ろで定義したものが優先されるようです。

関係性は不明ですがdictionary = {"key1": 1, "key2": 0}とし、以降の行でdictionary["key1"]=100のように定義してからdictionaryを出力するとkey1のvalueが100に書き換えられた状態で出力されます。

辞書型の仕様に興味がある方はPython ja 3.8.2rc1 ドキュメント 5. データ構造を参照。

全部貼るとこのページがリンクで埋め尽くされるので控えます。あとは自サイト内でも時間があるときに追加していく予定です。

標準ライブラリやモジュールを利用する

JSON読み書き - import json

JSON記法

.jsonという拡張子がついたファイルで取り扱います。

{
    "fruit":{"apple":300,"lemon":200,"orange":100,"strawberry":500},
    "drink":["juice","milk","water","coffee"]
}

この中で使われている{}[],:の配置はPythonの辞書型リスト型と同じです。
まず新規でファイルを作成し、以下を入力してください。ファイル名はtest.jsonとしましょう。既に.txtなど拡張子がついてしまっていた場合は削除して書き換えてください。

{
    # {}と入力した中心で改行すると、VScodeでは自動で一つタブが入ります。見やすい形式としてここではこの形を推奨します。
}

次に{}の間にデータを格納していきます。

{
    "num1":100,
    "num2":200
}

一度保存します。
同じディレクトリ[2:1]main.pyというファイルを作成してください。

main.py
import json
fr = open("Test.json","r")
json_data = json.load(fr)

cd 一つ下のディレクトリのパスで、main.pytest.jsonが設置されたディレクトリ[2:2]のpathをターミナルに打ち、main.pytest.jsonのある階層まで降りれたら、python3 main.pyと打ってファイルを実行してください。

この状態では何も出てきません。json_datatest.jsonの内容を格納しているだけです。

ではjson_dataの内容を出力しましょう。

import json
fr = open("Test.json","r")
json_data = json.load(fr)
print(json_data["num1"])
print(json_data["num2"])
fr.close()

100
200

これでjson_dataに代入したデータからKey"num1"とKey"num2"に該当する値が出力されました。

import json
json.dump(書き込むデータ(変数),open(書き込むpath,"w"))

json.load(open(path, mode))json.dump(data, open(path, mode), _option)で読み書きが行えます。

まずgameというディレクトリ[2:3]を作成してください。

ターミナルでcdを使いgameディレクトリまで移動します。gameディレクトリにmain.pysave.jsonのファイルを作成し、以下のプログラムをそれぞれに保存してください。

main.py
import json
json_data = json.load(open("save.json","r"))
def save(x):
    json.dump(x,open("save.json","w"))
# 間違った入力はエラーが出ます。
In1 = input()
In2 = input()
data = json_data[In1][In2]
if In1 == "history":
    print(data)
else:
    print(str(data) + "円です。")
json_data["history"].append(In2)
save(json_data)
save.json
{
    "drink":{"applejuice":100,"grapejuice":120,"cafeole":150},
    "bread":{"plain":100,"grapebread":200},
    "history":[]
}

保存できたらpython3 main.pyとターミナルに打ちmain.pyのプログラムを実行させましょう。

入力を求められるので一行目にはdrink、二行目にはapplejuiceと入力。

100円です。

ここでsave.jsonを確認して見てください。"history"の値であるリスト内に今回入力したItem名が格納されていれば正常に動作しています。

難読なフォーマットになるのを防ぐ方法は複数あります。
まず一つ、インデントを整える。

インデントを整えて読みやすくする

json.dump(x,open("save.json","w"))json.dump(x,open("save.json","w"),indent=4)に書き換えて実行します。

indent=4を書き加えたことで、一行にまとめられていたデータが改行とインデントで整えられました。

文字化けをなくす

日本語を利用したデータだと文字化けしてしまいます。これを防ぐため、json.dump(x,open("save.json","w"))json.dump(x,open("save.json","w"),ensure_ascii=False)に置き換えます。

ensure_ascii=Falseで非ASCII文字をエスケープする機能をオフにすることができます。[4:1]

keyでソート

json.dump(x,open("save.json","w"))json.dump(x,open("save.json","w"),sort_keys=True)に置き換えます。

区切りを指定

json.dump(x,open("save.json","w"))json.dump(x,open("save.json","w"),separators=(',', ': '))に置き換えます。
一つ目はkeyとvalueの区切り、二つ目は要素をひとまとめとして認識する区切りです。

正規表現 - import re

前提

import reをPython3プログラムの先頭に挿入。正規表現を使う行の前にこのコードがあれば正常に動作します。あちらこちらにimport文を書くと読みにくくなってしまいがちなので、先頭に表記することを推奨しています。

正規表現の扱い方

r"正規表現"あるいはr'正規表現'とすることで、""あるいは''内を通常の文字列ではなく正規表現の含まれる文字列として取り扱うことができます。
これから正規表現を取り扱うのに必要なメソッドを解説します。

メソッド - 属性

import re
if re.match(r"st.","string"):
    print(True)
else:
    print(False)

True

二行目のif re.match(r"st.","string"):if re.match(r"st.","ringst"):へ書き換えて実行して見ましょう。

import re
if re.match(r"st.","ringst"):
    print(True)
else:
    print(False)

False

検索対象の"string""ringst"に置きかわり、st.が一致する箇所は存在しない、と判定されました。

match(pattern, string)
# 文字列の先頭にパターンがあるか判定します。
search(pattern, string)
# パターンがどこにマッチするか調べます。
findall(pattern, string)
# patternに一致する部分、文字列全てをリスト型で返します。
finditer(pattern, string)
# patternに一致する部分と文字列全てをイテレータ型で返します。
split(pattern, string)
# パターンにマッチする部分の文字列で分割します。
sub(pattern, replace, string)
# patternに一致する箇所のstringをreplace内の文字列に置き換えます。

とても重要な事項について。

.^$*+?|[]()といった記号はr""r''""''内では正規表現を表すものとして扱われます。単なる文字として扱いたい場合、直前に\(バックスラッシュ一つ)を入れてください。また\自体を文字列として扱いたいときは\\のように記します。

正規表現の記法

. # ピリオド(.)は該当位置に改行以外の任意の文字が存在するかどうか。
^ # キャレット(^)は行の行頭にその文字列があるか。
$ # $を付加することで行の行末にその文字列があるか。
^\^ # 行頭の^が文字として行頭にあるか。
\$$ # 行末の$が文字として行末にあるか。
* # 直前の文字が該当位置から0個以上連続して存在するか。
+ # 直前の文字が該当位置から1個以上連続して存在するか。
? # 直前の文字が該当位置から0~1個連続して存在しているか。
| # 文字列aとbのどちらかが該当位置に存在するかは、r"文字列a|文字列b"で確認できる。また|は貪欲にならない。re.findall(r"ad|de","ade")と書いた場合両方含んでいるにも関わらず"ad"しか返されず"de"は無視される。左から右に該当するかのチェックが行われている。
[] # 該当位置に[]内のどれか一字が当てはまるか。
() # 該当位置に

正規表現の例

import re
print(re.findall("ab.de","abcde"))
print(re.findall(r"^abcde","abcdefghijk"))
print(re.findall(r"abcde$","abcde"))
print(re.findall(r"^\^","^abcde"))
print(re.findall(r"\$$","abcde$"))
print(re.findall(r"abcde*","abcdeee"))
print(re.findall(r"abcde+","abcde"))
print(re.findall(r"abcde?","abcd"))
print(re.findall(r"Python3|python3","Python3python3"))
print(re.findall(r"[Pp]ython3","Python3python3"))
print(re.findall(r"()",""))

結果

['abcde']
['abcde']
['abcde']
['^']
['$']
['abcdeee']
['abcde']
['abcd']
['Python3', 'python3']
['Python3', 'python3']

python3 - 正規表現で詳しく解説しています(予定)


  1. ここのページでは便宜上Enterとだけ記していますが、Enterキー、Returnキーなどが該当します。 ↩︎ ↩︎

  2. ここではフォルダのことをディレクトリと統一して呼びます。 ↩︎ ↩︎ ↩︎ ↩︎

  3. 入力のルールです。 ↩︎

  4. ensure_ascii=Trueの方がensure_ascii=Falseより遅い処理速度です。 ↩︎ ↩︎

TWEET