🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

972閲覧

正規表現で二桁の場合のみ数字を取得したい

kuuritar

総合スコア38

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/12/24 08:53

編集2019/12/24 08:54

"12日"のような「数字二桁と日」の文字列を正規表現で取得したいです。
ただし、日付のような"12月12日"の場合は取得したくないのですが、どのように書けば良いでしょうか?
(つまり、数字の前に"月"があるものは取得しないということです)

現状の正規表現は/\d{1,3}日/ですので、この正規表現の先頭に何を付与すれば良いか教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun68ykt

2019/12/24 09:02

使用できるプログラミング言語は何でしょうか?
kuuritar

2019/12/24 09:03

すみません書き忘れました。 ruby, pythonであれば理解できます。
jun68ykt

2019/12/24 09:22

ご返信ありがとうございます。python で回答しました。
jun68ykt

2019/12/24 09:35

回答しましたが、"月" が直前にある場合の他にも、 「こういう文字列にはマッチさせたくない」という要件があれば、ご質問に追記いただくか、回答にコメントいただければと思います。
guest

回答2

0

ベストアンサー

言語次第、否定後読みとかできるなら

/(?<![月\d])\d{2}日/

とかですかね

投稿2019/12/24 09:22

yambejp

総合スコア116694

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuritar

2019/12/25 07:50

ありがとうございます。こちらだと完璧に動作しました。
guest

0

こんにちは

否定後読み(Negative lookbehind)を使えばよいかと思います。
以下のサンプルでは、直前が "月" ではない "数字2桁日" というパターンがあれば、その 数字2桁部分を取り出す例です。

python3

1import re 2 3regexp = r'(?<!月)(\d{2})日' 4 5samples = [ 6 '12月23日', 7 '12月の24日', 8 '25日間' 9] 10 11for text in samples: 12 m = re.search(regexp, text) 13 if m: 14 print("%s: %s" % (text, m.group(1))) 15 else: 16 print("%s: not matched" % text) 17

参考になれば幸いです。

投稿2019/12/24 09:22

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/12/24 09:23

3桁の数値ヒットしません?
jun68ykt

2019/12/27 16:02

質問の本文だけ読んでおり、質問のタイトルを見落としてました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問