python正規構文
4622 ワード
python正規構文
正則のバッグ
^
一致モードの
ターゲット検索文字列
一致モード
$
一致モードの
欲張り?
マッチングモード
ターゲット文字列
一致モード
ここでは、一致する文字列のサブセット
最後に手に入れた
欲張りモードではないので、後ろから前へ、右から左へマッチングします.
非貪欲モードは、
に届く
後ろも欲張りモードなので.
+
ターゲット文字列
一致モード
後ろからマッチしています.
{1} {2,5} {2,}
|
または
間違いを報告します.グループはサブセットに対応するためです.一致モード
に届く
もしそうなら
に届く
(())
まず外層シート
に届く
[]
1任意の文字
中かっこはどちらでもよいことを示します.
に届く
2区間
また、例えば電話番号
1位は
中括弧はまた、0から9の数字を表す区間
3等しくない
18sssssssss
かっこの中を組み合わせる
あなたよし
\s\S
こんにちは
複数必要なら
君はいいね
\w
\u4E00-\u9FA5
こんにちは.
どちらも得られます.
京大学
欲張りモードなので、右からあればいいです.
に届く
南京大学
あるいは4桁の数字を指定できます
正則のバッグ
import re
.^
一致モードの
^
は、先頭を表す.^b
の代表はb
で始まる..
は任意の文字を表します.*
は任意の数を表します.^b.*
はbの先頭の任意の文字を表す.ターゲット検索文字列
line = "bobby123"
一致モード
regex_str = "^b.*"
re
のmatch
関数、第1パラメータ:ターゲット文字列、第2パラメータ:マッチングモード.$
一致モードの
$
は、最後を表す.3$
は、3
で終わる必要があることを示す..*3$
は3
で終わり、前は任意の文字列である.欲張り?
マッチングモード
?
は非貪欲モードである.ターゲット文字列
line = "boooooooobby123"
o
の前後に隣接する2つのb
に含まれる文字列を抽出する必要がある.一致モード
regex_str = ".*(b.*b).*"
ここでは、一致する文字列のサブセット
(b.*b)
を抽出するimport re
line = "boooooooobby123"
regex_str = ".*(b.*b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
最後に手に入れた
bb
欲張りモードではないので、後ろから前へ、右から左へマッチングします.
bby123
の上位2人を見つけました非貪欲モードは、
?
を加えて左からマッチングします.regex_str = ".*?(b.*b).*"
に届く
boooooooobb
後ろも欲張りモードなので.
b
はすべて抽出されます.boooooooob
がマッチング中であれば、後のbの前にも?
が加算される.後の最初のb
に出会ったら戻ります.regex_str = ".*?(b.*?b).*"
+
ターゲット文字列
line = "boooooooobaaasdboooooooobbaaaby123"
一致モード
regex_str = ".*(b.+b).*"
後ろからマッチしています.
+
は、少なくとも1回の出現を表す.{1} {2,5} {2,}
{1}
代表は少なく1回しか現れなかった.{2,5}
は最低2回、最大5回出現した.|
または
import re
line = "bobby123"
regex_str = "bobby|bobby123"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
間違いを報告します.グループはサブセットに対応するためです.一致モード
regre_str
には、括弧で表されるサブセットはありません.かっこをつける.regex_str = "(bobby|bobby123)"
に届く
bobby
もしそうなら
regex_str = "(bobby123|bobby)"
に届く
bobby123
(())
まず外層シート
group(1)
を持ち上げ、それからgroup(2)
の内層である.line = "boobby123"
regex_str = "((bobby|boobby)123)"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
に届く
boobby123
[]
1任意の文字
中かっこはどちらでもよいことを示します.
[abcd]
は、a,b,c,dのいずれでもよい.import re
line = "boobby123"
regex_str = "([abcd]oobby123)"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
に届く
boobby123
2区間
また、例えば電話番号
18782902222
.regex_str = "1[48357]"
1位は
1
で、2位は[48357]
の数字のいずれかです.13数、18数などですが、12数ではありません.中括弧はまた、0から9の数字を表す区間
[0-9]
を表すことができる.{0}
は9桁の数字です.line = "18782902222"
regex_str = "(1[48357][0-9]{9})"
3等しくない
import re
line = "18sssssssss"
regex_str = "(1[48357][^1]{9})"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
18sssssssss
かっこの中を組み合わせる
line = " _ "
regex_str = "( [A-Za-z0-9_] )"
あなたよし
\s\S
\s
スペースline = " "
regex_str = "( \s )"
こんにちは
\S
はスペースではありません複数必要なら
line = " sww "
regex_str = "( \S+ )"
君はいいね
\w
\w
は、下線を含む任意の単語文字に一致するが、「A−Za−z 0−9_」に等しい句読点を含まない.\W
とは反対で、\w
とは反対の文字を表します.\u4E00-\u9FA5
[\u4E00-\u9FA5]
漢字のみ抽出.import re
line = " w"
regex_str = "([\u4E00-\u9FA5]+)"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
こんにちは.
regex_str = ".*([\u4E00-\u9FA5] )"
regex_str = ".*([\u4E00-\u9FA5]+ )"
どちらも得られます.
京大学
欲張りモードなので、右からあればいいです.
regex_str = ".*?([\u4E00-\u9FA5]+ )"
に届く
南京大学
?
を加えて左から右へ.regex_str = ".*?(\d{4}) "
?
非貪欲を取り消すあるいは4桁の数字を指定できます
regex_str = ".*(\d{4}) "