python正規構文

4622 ワード

python正規構文
正則のバッグimport re.
^
一致モードの^は、先頭を表す.^bの代表はbで始まる..は任意の文字を表します.*は任意の数を表します.^b.*はbの先頭の任意の文字を表す.
ターゲット検索文字列line = "bobby123"
一致モードregex_str = "^b.*" rematch関数、第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}) "