Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
7. プロのようにデータを操る
7.1 文字列
7.1.6 パターン:メタ文字
パターン |
マッチ対象 |
|
---|---|---|
リテラルの | ||
| | または | |
\n以外の任意の文字 | ||
^ | ソース文字列の先頭 | |
$ | ソース文字列の末尾 | |
? | 0個か1個の | |
* | 0個以上の | |
*? | 0個以上の(そのうち最も繰り返し個数の少ないものに一致) | |
+ | 1個以上の | |
+? | 1個以上の(そのうち最も繰り返し個数の少ないものに一致) | |
個の連続した | ||
個以上個以下の連続した | ||
個以上個以下の連続した(そのうち最も繰り返し個数の少ないものに一致) | ||
またはまたは | ||
^ | またはまたは以外 | |
が続いている | ||
が続いていない | ||
が前にある | ||
が前に無い |
################## ### メタ文字列 ### ################## 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版が出ているものの初版しか持っていないのでこちらで。