No.035 [Python] 문자열 교체 ②
4482 단어 Pythonprogramming
1초에 한 번씩 '문자열 바꾸기' 를 써라.
I'll write continuousy about the replacement of strings in python"on this page.
■ 정규 표현식 교체:re.sub / re.subn
The replacement by Regular expression:re.sub, re.subn
>>> # 置換元文字列と完全一致の場合、置換される(replace()・translate()関数)
>>> # 完全一致出ない置換の場合は、reモジュール sub()関数を利用する
>>>
>>> import re
>>>
>>> w = '[email protected] [email protected] [email protected]'
>>>
>>> print(re.sub("[a-z]*@", "ABC@", w))
[email protected] [email protected] [email protected]
>>>
>>>
>>> # replace()同様、第四引数(count)に最大置換回数の指定が可能
>>>
>>> print(re.sub('[a-z]*@', 'ABC@', w, 2))
[email protected] [email protected] [email protected]
>>> # 複数の文字列を同文字列へ置換
>>>
>>> import re
>>>
>>> w = '[email protected] [email protected] [email protected]'
>>>
>>> print(re.sub("[xyz]", "1", w))
[email protected] [email protected] [email protected]
>>> # ↑複数の異なる文字を同じ文字列に置換する場合に利用する
>>> # |で区切るといずれかのパターンにマッチする
>>> # 正規表現の特殊文字利用も可、文字列をそのまま指定しても可能
>>> # 複数の異なる文字列を同じ文字列に置換する場合に利用する
>>>
>>> import re
>>>
>>> w = '[email protected] [email protected] [email protected]'
>>>
>>> print(re.sub('aaa|bbb|ccc', 'ABC', w))
[email protected] [email protected] [email protected]
>>> # 一致箇所を使った置換
>>> # パターンの一部を()で囲む:()内の一致する文字列を利用することが可能
>>>
>>> print(re.sub('([a-z]*)@', '\\1-123@', w))
[email protected] [email protected] [email protected]
>>>
>>>
>>> print(re.sub('([a-z]*)@', r'\1-123@', w))
[email protected] [email protected] [email protected]
>>>
>>>
>>> # ↑ \1 が()に一致した箇所に対応。()が吹く風の場合は \2,\3とする
>>> # ↑ '',””で囲まれた文字列は、\\1の様に\をエスケープすることが必要
>>> # ↑ r""の様に先頭にrをつけるraw文字列の場合、\1で問題ない
>>> # 置換箇所の個数取得
>>> # 置換された文字列と置換部分の個数とタプルを返す
>>> t = re.subn('[a-z]*@', 'ABC@', w)
>>>
>>> print(t)
('[email protected] [email protected] [email protected]', 3)
>>>
>>> print(type(t))
<class 'tuple'>
>>>
>>> print(t[1])
3
>>> # 辞書ではなく、3つの文字列を引数として指定することも可能
>>>
>>> print(w.translate(str.maketrans('ow', 'ZW', 'n')))
Ze tWZ Ze tWZ Ze tWZ
>>> # 以下の場合、第一・第二引数の文字列の長さは一致が必要
>>> # 置換先文字列に長さ2つ以上文字列は指定不可
>>>
>>> print(w.translate(str.maketrans('ow', 'ZZW', 'n')))
Traceback (most recent call last):
File "<pyshell#88>", line 1, in <module>
print(w.translate(str.maketrans('ow', 'ZZW', 'n')))
ValueError: the first two maketrans arguments must have equal length
■ 지정된 위치로 교체, 삽입:슬라이스
The replacement and insertion by tab control specification:slice
>>> # スライスによる分割により任意の文字列と連結
>>> # →指定位置が置換された新たな文字列が作成できる
>>> w = "'abcdefghijklmn'"
>>>
>>> print(w[:5] + "XXX" + w[8:])
'abcdXXXhijklmn'
>>> # 文字列に別の文字列を連結しているだけ
>>> # → 文字数の一致は不要
>>>
>>> print(w[:5] + '-' + w[8:])
'abcd-hijklmn'
>>> # 任意の位置に別の文字列を挿入し、新たな文字列の作成も可能
>>>
>>> print(s[:5] + '*******' + s[5:])
Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
print(s[:5] + '*******' + s[5:])
NameError: name 's' is not defined
>>> print(w[:5] + '*******' + w[5:])
'abcd*******efghijklmn'
수시로 업데이트되므로 정기적으로 구독해주세요.I'll update my article at all times.
So, please subscribe my articles from now on.
본 보도에 관하여 만약 무슨 요구가 있으면 마음대로 메시지를 남겨 주십시오!
If you have some requests, please leave some messages! by You-Tarin
또한 Qita에 투고한 내용은 언제든지 블로그에 가고 싶으니 잘 부탁드립니다.
Reference
이 문제에 관하여(No.035 [Python] 문자열 교체 ②), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/You-Tarin/items/440c016e1921c83d76ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)