🖥

#python の 正規表現で何故か match が起こらない ? 複数行どころか先頭文字列にしかマッチしないから気をつけて!

2019/04/06に公開

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

https://github.com/YumaInaura/YumaInaura/issues/1095

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-04-06

Discussion