🖥
#python の 正規表現で何故か match が起こらない ? 複数行どころか先頭文字列にしかマッチしないから気をつけて!
search を使うと良いっぽい
フォーマルなやり方かどうかは不明。
match の場合
>>> import re
>>> re.match(r'A', "A\nB\nC")
<re.Match object; span=(0, 1), match='A'>
>>> re.match(r'B', "A\nB\nC")
search の場合
>>> re.search(r'A', "A\nB\nC")
<re.Match object; span=(0, 1), match='A'>
>>> re.search(r'B', "A\nB\nC")
<re.Match object; span=(2, 3), match='B'>
>>>
Doc
このあたりを読めば良さそう
7.2. re — Regular expression operations — Python 2.7.16 documentation
これかな
MULTILINE mode では match は文字列先頭にしかマッチしないと書かれている。
Note however that in MULTILINE mode match() only matches at the beginning of the string, whereas using search() with a regular expression beginning with '^' will match at the beginning of each line.
>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No match
>>> re.search('^X', 'A\nB\nX', re.MULTILINE) # Match
<_sre.SRE_Match object at ...>
え、もしかして‥
本当に先頭からしかマッチしないのか! 分かりづらい‥! (Rubyと違う)
>>> re.match(r'A', 'ABC')
<re.Match object; span=(0, 1), match='A'>
>>> re.match(r'B', 'ABC')
Ruby の場合
こんなん
[9] pry(main)> "A\nB\nC".match('B')
=> #<MatchData "B">
Original by Github issue
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2019-04-06
Discussion