質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

5130閲覧

Python3 日本語を含む文字列の検索

starrow1103

総合スコア137

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2017/04/03 05:03

編集2017/04/03 05:08

環境

Python 3.6
MacOS Sierra

やりたいこと

textから特定の範囲に何が含まれていても範囲指定で検索できる書き方がわかりません
以下のようなテキストがあったとします([]はリストではない。ワードプレスとかでのショートカット機能みたいなもんです)

text = 'あかさたな[tooltip content="何がかかれているかわからない"]単語[/tooltip]はまやらわ'

↓ここから[tooltip]〜[/tooltip]で囲まれた文字列だけを見つけたい

単語

<イメージ>

py3

1word = re.findall("[tooltip+hogehoge+[/tooltip]",text)

これができなくて禿げそうです。

お願いいたします。

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

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

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

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

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

guest

回答3

0

解決されましたが、tell_kさんの回答を参考に、tooltip部分(\w+)も任意にマッチングするパターンにしてみました。
ざっと動作させたところ問題はなさそうですが、参考まで。

Python

1import re 2 3rep = re.compile("\[(\w+).*?\](.*?)\[/\\1\s*\]") #[hoge~]単語[/hoge] 4text = 'あかさたな[tooltip content="何がかかれているかわからない"]単語[/tooltip]はまやらわ' 5#text = 'ああ[tooltip content="hoge"]単語あ[/tooltip]いい[item attr="huga"]単語い[/item]うう[a][/a]' 6 7matchs = rep.finditer(text) 8for match in matchs: 9 print( match.group(2)) # 単語は2番目のグループ 10 #print( match.groups())

投稿2017/04/03 06:38

can110

総合スコア38234

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

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

starrow1103

2017/04/03 08:59

なるほど、ありがとうございます。 .*? が今回のポイントだったようです。 ただ、後半の \\1\s*\ の部分がつかめません^^; どういう意味なのでしょうか
can110

2017/04/03 09:06

「\\1」は正規表現の「後方参照」です。 「[tooltip」の「tooptip」部分を後ろの「[/????」の???の部分で参照できるようになります。 「\s*」は[/tooltipのうしろにある末尾の空白は許す→ [/tooltip ]はOKという意味です。
starrow1103

2017/04/03 09:10

なるほどありがとうございました! ちょくちょくいじって、勉強してみますね。
guest

0

ベストアンサー

tooltipの属性? の contentがあったりなかったり、スペースが一個じゃなかったり、他の属性名だった場合なども考慮して緩めの正規表現を作ってみました。

python

1import re 2 3text = 'あかさたな[tooltip content="何がかかれているかわからない"]単語[/tooltip]はまやらわ[tooltip other="AA"]テスト1[/tooltip][tooltip]テスト2[/tooltip]は[tooltip content="AAA"]テスト3[/tooltip]' 4for r in re.findall(r'\[tooltip[^\[]*\](.+?)\[/tooltip\]', text): 5 print(r)

投稿2017/04/03 06:00

tell_k

総合スコア2120

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

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

starrow1103

2017/04/03 06:12

ありがとうございます! より範囲が広いバージョンを提供してくださったこちらをベストアンサーとさせていただきます。 本当は、[tooltip][/tooltip]で囲まれた文字列だけ残したかったので、 以下のように少し修正したらうまく目的のものを作ることができました。 ```py3 match =re.findall(r'(\[tooltip[^\[]*\](.+?)\[/tooltip\])', text) for m in match: text = text.replace(m[0],m[1]) print(text) ``` ありがとうございました!
guest

0

正規表現を使用する必要があると思います。

python

1>>> import re 2>>> match =re.search(r'\[tooltip\scontent="\w+"\](\w+)\[/tooltip\]', t) 3>>> match.group(1) 4'単語'

投稿2017/04/03 05:10

編集2017/04/03 05:11
terapyon

総合スコア313

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

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

starrow1103

2017/04/03 06:09

ありがとうございます!大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問