完全一致
置換をするときに部分一致でやると予想外の文字が変わって不都合がでることがあります。例えば
abc py pySerial pySerialN
pyだけを消去したいとします。
org_text = r"abc py pySerial pySerialN"
res = re.sub(r'py', "", org_text)
結果:
abc Serial SerialN
pyが全部消されてしまいました。pyだけを消去するにはpyに完全一致した文字のみ小今日するようにします。
org_text = r"abc py pySerial pySerialN"
res = re.sub(r'\bpy\b',"", org_text)
結果:
abc pySerial pySerialN
期待通りpyだけ消去されました。
完全一致にするには
\b完全一致する文字列
\b
と
\bで囲みます。
部分一致した単語を表示する
abc py pySerial pySerialNをpyで検索したとき、pyが3つ表示されるだけす。
py pySerial pySerialNとpyに続く文字まで表示したいですね。
org_text = r"abc py pyGame pySerialN"
result = re.findall('(?=py)\w+', org_text)
結果:
['py', 'pySerial', 'pySerialN']
期待通りの結果です。
pyの後ろだけ取得することもできます。
org_text = r"abc py pyGame pySerialN"
result = re.findall('(?<=py)\w+', org_text)
結果:
['Game', 'SerialN']
行数を取得する
文字列の行数をC言語などで独自に実装するのが案外面倒です。しかし、正規表現を使えば簡単です。
org_text = r"""abc 789 ssd
hello 456 pySerial
love pyGame.256
"""
res = re.findall('\n', org_text)
print(len(res))
結果:
3
非常に簡単です。