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

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

新規登録して質問してみよう
ただいま回答率
85.31%
正規表現

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

Q&A

解決済

2回答

650閲覧

正規表現で【】()内の文字以外を抜き出したい

barao

総合スコア18

正規表現

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

0グッド

0クリップ

投稿2022/02/09 11:05

編集2022/02/09 11:34

やりたいこと

下記のような文章でピテカントロあああ自由asss999ーだけを取り出したい場合どのような書き方がハマるのでしょうか?
正規表現チェッカーで色々試してみましたが上手くいきませんでした。
カッコ内()【】は英数字漢字ひらがなカタカタ入り混じっているものとし、それぞれ文字は動的に生成される想定です。

また、使用意図としてはプログラムではなく、リネームアプリで該当部分だけを残したい想定です。

よろしくお願いします(;_;)

【あい手うおakx48】ピテカントロあああ自由asss999ー(いろはに感じamsu92)

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

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

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

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

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

guest

回答2

0

ベストアンサー

ネスティングが無いようなので、可能です。
(?<=^|[)】])[^)】]+(?=$|[(【])

「先頭か、閉じ括弧」と「末尾か、開き括弧」の間。

投稿2022/02/09 11:33

編集2022/02/09 11:36
otn

総合スコア86307

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

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

otn

2022/02/09 11:38

プログラミング言語じゃないと言うことなので、 もしそのツールに (?<= や (?= のような先読み後読み機能が無いのであれば、 単なる括弧にして、残ってしまう括弧は後で取り除くか。
barao

2022/02/09 11:41

ありがとうございます! 正規表現チェッカーだと上手く動作しました! allrenameというツールの正規表現では反応しませんでした。 正規表現でも使用できるものできないものがあるという事でしょうか?
otn

2022/02/09 11:52

そうですね。多くのツールでは「拡張正規表現」という範囲の機能は使えると思いますが、それをさらに拡張した機能はサポートしていない物も多いでしょう。先読み・後読みは「拡張正規表現」の範囲外のPerl拡張と呼ばれる範疇です。 その場合は、コメントに書いたとおりです。
barao

2022/02/09 11:53

ありがとうございます! こちらで何とか対応したいと思います
melian

2022/02/09 12:04

> barao さん allrename が「お~瑠璃ね~む」のことであれば、 https://beefway.sakura.ne.jp/files/readme_allrename.html > Unicode対応の正規表現について > > Unicodeに対応した正規表現は、K.Takata氏の作成したDLL "bregonig.dll" を入手し、お~瑠璃ね~むと同じフォルダ内に置くことで対応できます。 だそうで、bregoing.dll は PCRE にも対応しているとのことです。
otn

2022/02/09 12:07

こういうことに似た作業が今後何度もあるなら、 Windows標準装備のPowerShellかVBScriptを学ぶと自由度が高く何でも出来ます。 (もちろん、PythonやRuby等の言語をインストールして使っても良いですが) あるいは、使いこなせるエディターがあるなら、 そのファオルダーで、コマンドプロンプトで、dir /b >filerename.bat と実行すると ファイル名一覧がfilerename.batに入るので、それをエディターで加工して、 ren "【aaa】bbbb(ccc)" "bbb" ren "【xxx】yyy(zzz)" "yyy" のような内容に書き換えて、filerename.bat を実行するとリネームできます。
otn

2022/02/09 12:10

> bregoing.dll は PCRE にも対応しているとのことです。 なるほど。 > baraoさん PCREというのは、先に書いたPerl拡張のことです。
guest

0

pythonなら以下です。

python

1>>> import re 2>>> 3>>> text = "【あい手うおakx48】ピテカントロあああ自由asss999ー(いろはに感じamsu92)" 4>>> m = re.search("【[^】]*】([^\(]*)\([^\)]*\)", text) 5>>> print(m.groups()[0]) 6ピテカントロあああ自由asss999ー

投稿2022/02/09 11:26

ppaul

総合スコア24672

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

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

barao

2022/02/09 11:31

ご回答ありがとうございます! プログラムではなく検索ワードで名称変更するアプリで使用する想定でした。 何か違うのか動作しませんでした。すいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問