先読み・後読み

Pythonで学ぶ正規表現

Maria Eugenia Inzaugarat

Data Scientist

見回し(Lookaround)

  • メインのパターンの前後にサブパターンがあるか確認できる

   

Pythonで学ぶ正規表現

見回し(Lookaround)

  • メインのパターンの前後にサブパターンがあるか確認できる

 

現在のマッチ位置から、前後を見てパターンが一致するか(しないか)を確認してから処理を続ける。

Pythonで学ぶ正規表現

先読み

  • 非捕捉グループ
  • 最初のパターンの直後が先読みパターンか(でないか)を確認
  • 返すのは最初のパターンのみ

Pythonで学ぶ正規表現

肯定の先読み

  • 非捕捉グループ
  • 最初のパターンの直後が先読みパターンであることを確認
  • 返すのは最初のパターンのみ

 

my_text = "tweets.txt transferred, mypass.txt transferred, keywords.txt error"

re.findall(r"\w+\.txt ", my_text)
Pythonで学ぶ正規表現

肯定の先読み

  • 非捕捉グループ
  • 最初のパターンの直後が先読みパターンであることを確認
  • 返すのは最初のパターンのみ

 

my_text = "tweets.txt transferred, mypass.txt transferred, keywords.txt error"

re.findall(r"\w+\.txt(?=\stransferred)", my_text)
['tweets.txt', 'mypass.txt']
Pythonで学ぶ正規表現

否定の先読み

  • 非捕捉グループ
  • 最初のパターンの直後が先読みパターンでないことを確認
  • 返すのは最初のパターンのみ

 

my_text = "tweets.txt transferred, mypass.txt transferred, keywords.txt error"

re.findall(r"\w+\.txt ", my_text)
Pythonで学ぶ正規表現

否定の先読み

  • 非捕捉グループ
  • 最初のパターンの直後が先読みパターンでないことを確認
  • 返すのは最初のパターンのみ

 

my_text = "tweets.txt transferred, mypass.txt transferred, keywords.txt error"

re.findall(r"\w+\.txt(?!\stransferred)", my_text)
['keywords.txt']
Pythonで学ぶ正規表現

後読み

  • 非捕捉グループ
  • 特定パターンに先行される(されない)一致を取得
  • 後読みの後ろ側のパターンを返す

Pythonで学ぶ正規表現

肯定の後読み

  • 非捕捉グループ
  • 特定パターンに先行される一致を取得
  • 後読みの後ろ側のパターンを返す

 

my_text = "Member: Angus Young, Member: Chris Slade, Past: Malcolm Young, Past: Cliff Williams."

re.findall(r" \w+\s\w+", my_text)
Pythonで学ぶ正規表現

肯定の後読み

  • 非捕捉グループ
  • 特定パターンに先行される一致を取得
  • 後読みの後ろ側のパターンを返す

 

my_text = "Member: Angus Young, Member: Chris Slade, Past: Malcolm Young, Past: Cliff Williams."

re.findall(r"(?<=Member:\s)\w+\s\w+", my_text)
['Angus Young', 'Chris Slade']
Pythonで学ぶ正規表現

否定の後読み

  • 非捕捉グループ
  • 特定パターンに先行されていない一致を取得
  • 後読みの後ろ側のパターンを返す

 

my_text = "My white cat sat at the table. However, my brown dog was lying on the couch."

re.findall(r"(?<!brown\s)(cat|dog)", my_text)
['cat']
Pythonで学ぶ正規表現

練習しましょう!

Pythonで学ぶ正規表現

Preparing Video For Download...