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

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

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2106閲覧

re.search検索に二文字以上日本語を指定した場合の検索結果位置

GoTak

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/27 01:40

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

re.findall,re.fondîtes,re.searchに二文字以上の日本語検索すると、検索結果の位置が検索語の先頭で無く最後の文字位置を指してしまう。最初の文字位置を得るにはどうすれば良いでしょうか?
エラーメッセージ
無し

該当のソースコード

Python
ソースコード

import re
def t1():
s='平成10年 1990 昭和5年'
result=re.search(r'[大正|昭和|平成][0-9]|[0-9][0-9]',s)
print(result)
s='私は若猫10歳である'
result=re.search('[若猫|老猫][0-9]',s)
print(result)
s='私は若猫10歳である'
result=re.search('若[猫|犬][0-9]',s)
print(result)
s='私は新人類10である'
result=re.search('[新人類|旧人類][0-9]',s)
print(result)
if name == 'main':
t1()

試したこと

findall,fondîtesも同様

補足情報(FW/ツールのバージョンなど)

以下が結果

<_sre.SRE_Match object; span=(1, 3), match='成1'>
<_sre.SRE_Match object; span=(3, 5), match='猫1'>
<_sre.SRE_Match object; span=(2, 5), match='若猫1'>
<_sre.SRE_Match object; span=(4, 6), match='類1'>

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

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

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

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

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

guest

回答1

0

[]は、内側に書かれた文字列内の「どれか1つの文字」にマッチするという意味になります。
[大正|昭和|平成]は「大」「正」「|」「昭」「和」「平」「成」のどれか1文字にマッチします。
「大正」「昭和」「平成」のいずれかにマッチさせたい場合は、(?:大正|昭和|平成)と書きます。

投稿2020/12/27 02:00

actorbug

総合スコア2420

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

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

GoTak

2020/12/27 02:22

有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問