0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

正規表現「?」の使い道

Last updated at Posted at 2024-05-25

はじめに

正規表現で . + * {...} (...)をよく使うが、? の使い道がわからず調べてみた。特に文字列の最短ヒットをさせるときに使と便利。

目次

「X?」直前にXがあるorない。

例えば「。」がついても、ついてなくてもヒットさせたい場合は下記の通り。
"!"で終わる場合"!"を含まないようにヒットする。

example.py
str_data = 'あついですね'
hit_data = re.search(r'.*ですね。?',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 6), match='あついですね'>

str_data = 'あついですね。'
hit_data = re.search(r'.*ですね。?',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 7), match='あついですね。'>

str_data = 'あついですね!'
hit_data = re.search(r'.*ですね。?',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 6), match='あついですね'>

戻る

「(?=XXXX)」後ろにXXXと続く。

例えば後ろに"さん"か"様"がつくものをヒットさせる。

example.py
str_data = 'たろう様'
hit_data = re.search(r'.+(?=(さん|様)$)',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 3), match='たろう'>

str_data = 'たろうさん'
hit_data = re.search(r'.+(?=(さん|様)$)',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 3), match='たろう'>

str_data = 'たろうくん'
hit_data = re.search(r'.+(?=(さん|様)$)',str_data)
print(f'# {hit_data}')
# None

str_data = 'たろう'
hit_data = re.search(r'.+(?=(さん|様)$)',str_data)
print(f'# {hit_data}')
# None

戻る

最短でヒットさせる。

同じ文字列が並んでいるときに最短でヒットさせたい場合に使う。
例は直後に,がある文字列を最短ヒットさせる。

example.py
str_data = '012,345,678,'
hit_data = re.search(r'.*,',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 12), match='012,345,678,'>
# 最長でヒットする。

hit_data = re.search(r'.*?,',str_data)
print(f'# {hit_data}')
# <re.Match object; span=(0, 4), match='012,'>
# 最短でヒットする。

戻る

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?