正規表現
文字クラス[]
[abc]
[]テキストと一致するかどうかを確認します.
「a」は正規表現と一致します.「a」があるからです.
「before」は、「b」という文字があるため、通常の式と一致します.
正規表現に一致するアルファベットa、b、cが含まれていないため、dudeは一致しません.
ハイフネーションはFrom-toと表すことができます
ex)[a-c]=[abc],[a-zA-Z]=すべてのアルファベット,[0-5]=[012345]
[]で^を使用すると、逆(not)になります.
ex)[^0-9]=数値以外の文字
共通文字クラス
d:[0-9]と同じ式、数字
D:[^0-9]の式、非数値
s:スペース文字と組み合わせて、スペースを表します.
S:スペース以外の文字と組み合わせて、つまり空白ではありません.
w:アルファベット、数字、式は[a-zA-Z 0-9]と同じ
W:アルファベット、数字、非、式は[^a-zA-Z 0-9]と同じ
Dot(.)
a.b
改行記号(n)以外のすべての文字と組み合わせます.
「abc」は中間の「a」がすべてを表す「a」である.正規式と一致する.
「a 0 b」は、中間文字「0」がすべての文字を表す「.」正規式と一致する.
「abc」と「a」と「b」の間に文字が必要なこの正規表現は一致しないため、一致しません.
繰り返し(*)
ca*t
は、前の文字を0回以上繰り返す式です.
「ct」は「a」を0回繰り返すことで組み合わせる.(0回含む)
「cat」は「a」を1回繰り返すことで組み合わせたものです.
「caaat」は「a」を3回繰り返すことで組み合わせる.
繰り返し(+)
ca+t
は、前の文字が1回以上繰り返される式です.
「ct」は「a」を0回繰り返すため、コーディネートしません.(と*の違い)
「cat」は「a」を1回繰り返すことで組み合わせたものです.
「caaat」は「a」を3回繰り返すことで組み合わせる.
繰り返し{m,n}
ca{2}t
前の字を探すのは2回しか繰り返さない.
「cat」の「a」は一度だけ繰り返して、組み合わせません.
「caat」は「a」から2回繰り返して組み合わせる.
検索前の文字を2~5回繰り返します.
「cat」の「a」は一度だけ繰り返して、組み合わせません.
「caat」は「a」から2回繰り返して組み合わせる.
「caaaat」は「a」を5回繰り返し組み合わせたものです.
繰り返し(?)
ab?c
?検索前の文字は0回または1回繰り返します.
「abc」は「b」で組み合わせたものです.
「ac」は0回「b」で組み合わせる.
正規表現
import re
p = re.compile('ab*')
m = p.match('python')
print(m)
モードオブジェクト(p)を作成し、他の文字列と比較できます.
モードオブジェクトを使用するには、Match、Search、Finall、Finitterの4つの方法があります.
Match
文字列の先頭が正規表現と一致するかどうかを確認します.
matchオブジェクトには4つの方法(group,start,end,span)がある.
import re
p = re.compile('[a-z]+') # 소문자가 1번이상 반복되는지
m = p.match('python3')
print(m) # 매치된다
m = p.match('3python')
print(m) # 매치되지 않는다
✔matchオブジェクトの4つの方法
import re
p = re.compile('[a-z]+')
m = p.match('python')
print(m.group())
print(m.start())
print(m.end())
print(m.span())
Search
すべての
import re
p = re.compile('[a-z]+')
m = p.search('3python')
print(m)
findall
import re
p = re.compile('[a-z]+')
m = p.findall('life is too short')
print(m)
finditer
m = p.finditer('life is too short')
print(m)
for x in m:
print(x)
コンパイルオプション
正規表現をコンパイルする場合は、次のオプションを使用します.
DOTALL, S : . この改行記号(n)を含めて、すべての文字と組み合わせることができます.
IGNORECASE,I:大文字と小文字を問わずコーディネートできます.
MULTILINE,M:複数の線と組み合わせることができます.
VERBOSE、X:verboseモードの使用を許可します.(正規表現の表示が容易になり、コメントなども使用できます.)(長い正規表現を使い分ける.)
import re
p = re.compile('a.b' , re.DOTALL)
m = p.match('a\nb')
print(m)
✔[a-z]+正規表現は小文字のみを表すが、re.Iオプション、大文字と小文字を区別せずに組み合わせます.
p = re.compile('[a-z]+')
m = p.match('Python')
print(m)
p = re.compile('[a-z]+', re.I)
m = p.match('Python')
print(m)
✔^は文字列の先頭、$は文字列の末尾を表します.
import re
p = re.compile('^python\s\w+')
data = """python one
life is too short
python two
you need python
python three"""
print(p.findall(data))
✔MULTILINE実習-^abは文字列の先頭を常にabで、xy$は文字列の末尾を常にxyで結ぶ必要があります.
import re
p = re.compile('^python\s\w+', re.M)
data = """python one
life is too short
python two
you need python
python three"""
print(p.findall(data))
✔VERBOSE実習
import re
charref = re.compile(r'&[#](0[0-7]+|[0-9]+|x[0-9a-fA-F]+);')
charref = re.compile(r"""
&[#] # Start of a numeric entity reference
(
0[0-7]+ # Octal form
| [0-9]+ # Decimal form
| x[0-9a-fA-F]+ # Hexadecimal form
)
; # Trailing semicolon
""", re.VERBOSE)
スラッシュ問題
正規表現におけるr""の意味
多くの場合、正規モードの前にrを加える.Python正規表現にはRaw stringという構文があり、コンパイルする正規表現がRaw String(純文字)であることを示すことができます.
p=reの場合.compile("section")と書くと、sはスペース文字を表す[tnrfv]となり、所望の結果が見つからない.
そのため、このエスケープを利用してsectionと呼べば良いのですが、Pythonでrを特殊に使うと、1つのスラッシュだけで2つ書く効果があります.
Reference
この問題について(正規表現), 我々は、より多くの情報をここで見つけました https://velog.io/@jaeyoung9849/정규표현식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol