「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Pythonをゆっくりていねいに学ぶ(その19/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

7. プロのようにデータを操る

7.1 文字列

7.1.6 パターン:メタ文字
 
パターン
マッチ対象
  \mathrm{abc} リテラル\mathrm{abc}
  \left\{\mathrm{expr}\right\} \mathrm{expr}
  \mathrm{expr1}\mathrm{expr2} \mathrm{expr1}または\mathrm{expr2}
  \mathrm{.} \n以外の任意の文字
  ^ ソース文字列の先頭
  $ ソース文字列の末尾
  \mathrm{prev} ? 0個か1個の\mathrm{prev}
  \mathrm{prev} * 0個以上の\mathrm{prev}
  \mathrm{prev} *? 0個以上の\mathrm{prev}(そのうち最も繰り返し個数の

少ないものに一致)
  \mathrm{prev} + 1個以上の\mathrm{prev}
  \mathrm{prev} +? 1個以上の\mathrm{prev}(そのうち最も繰り返し個数の

少ないものに一致)
  \mathrm{prev}\left\{\mathrm{m}\right\} \mathrm{m}個の連続した\mathrm{prev}
  \mathrm{prev}\left\{\mathrm{m,n}\right\} \mathrm{m}個以上\mathrm{n}個以下の連続した\mathrm{prev}
  \mathrm{prev}\left\{\mathrm{m,n}\right\}? \mathrm{m}個以上\mathrm{n}個以下の連続した\mathrm{prev}(そのうち最も

繰り返し個数の少ないものに一致)
  \left\{\mathrm{abc}\right\} \mathrm{a}または\mathrm{b}または\mathrm{c}
  \left\{\right.^\left.\mathrm{abc}\right\} \mathrm{a}または\mathrm{b}または\mathrm{c}以外
  \mathrm{prev}(?=\mathrm{next}) \mathrm{next}が続いている\mathrm{prev}
  \mathrm{prev}(?!\mathrm{next}) \mathrm{next}が続いていない\mathrm{prev}
  (?\lt=\mathrm{prev})\mathrm{next} \mathrm{prev}が前にある\mathrm{next}
  (?\lt!\mathrm{prev})\mathrm{next} \mathrm{prev}が前に無い\mathrm{next}
##################
### メタ文字列 ###
##################

import re

source = """I wish I may, I wish I might ... Have a dish of fish tonight."""

# 任意の位置にあるwishをすべて探す
print(source + 'から')
print('1. 任意の位置にあるwishをすべて探す')
meta_letters1 = re.findall('wish', source)
print(meta_letters1)
print('')

# 任意の位置にあるwishかfishを探す
print(source + 'から')
print('2. 任意の位置にあるwishかfishを探す')
meta_letters2 = re.findall('wish|fish', source)
print(meta_letters2)
print('')

# 先頭にあるwishを探す
print(source + 'から')
print('3. 先頭にあるwishを探す')
meta_letters3 = re.findall('^wish', source)
print(meta_letters3)
print('')

# 先頭にあるI wishを探す
print(source + 'から')
print('4. 先頭にあるI wishを探す')
meta_letters4 = re.findall('^I wish', source)
print(meta_letters4)
print('')

# 末尾にあるfishを探す
print(source + 'から')
print('5. 末尾にあるfishを探す')
meta_letters5 = re.findall('fish$', source)
print(meta_letters5)
print('')

# 末尾にあるfish tonight.を探す
print(source + 'から')
print('6. 末尾にあるfish tonight.を探す')
meta_letters6 = re.findall('fish tonight\.$', source)
print(meta_letters6)
print('')

# wかfの後にishが続く文字列を探す
print(source + 'から')
print('7. wかfの後にishが続く文字列を探す')
meta_letters7 = re.findall('[wf]ish', source)
print(meta_letters7)
print('')

# w,s,hのどれかが1個以上続いているところを探す
print(source + 'から')
print('8. w,s,hのどれかが1個以上続いているところを探す')
meta_letters8 = re.findall('[wsh]+', source)
print(meta_letters8)
print('')

# ghtの後ろに英数字以外のものが続いているところを探す
print(source + 'から')
print('9. ghtの後ろに英数字以外のものが続いているところを探す')
meta_letters9 = re.findall('ght\W+', source)
print(meta_letters9)
print('')

# I (I+スペース)の後ろにwishが続くところを探す
print(source + 'から')
print('10. I (I+スペース)の後ろにwishが続くところを探す')
meta_letters10 = re.findall('I (?=wish)', source)
print(meta_letters10)
print('')

# wishの前にI (I+スペース)があるところを探す
print(source + 'から')
print('11. wishの前にI (I+スペース)があるところを探す')
meta_letters11 = re.findall('(?<=I) wish', source)
print(meta_letters11)
print('')

# 先頭がfishになっている単語にマッチ
print(source + 'から')
print('12. 先頭がfishになっている単語にマッチ')
meta_letters12 = re.findall(r'\bfish', source) # 正規表現のパターン文字列を定義するにはr文字を追加する
print(meta_letters12)
print('')




*1:第2版が出ているものの初版しか持っていないのでこちらで。

プライバシーポリシー お問い合わせ