Regular Expression(正規表現) Part16

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2021/11/03(水) 19:50:01.71ID:ebAE+z9+
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part15
https://mevius.5ch.net/test/read.cgi/tech/1568640311/


次スレは>>980宜しく
天ぷら等>>2以降
2022/06/24(金) 16:36:46.31ID:ECcLc/fl
>>287
START(?:(?!START)[\S\s])*
289デフォルトの名無しさん
垢版 |
2022/06/24(金) 16:39:49.07ID:P24pDyi3
>>288
早速の回答ありがとうございます
希望した結果が得れました
290デフォルトの名無しさん
垢版 |
2022/06/24(金) 18:26:54.64ID:0z9KCe6G
template<>引数にはclassでない定数リテラルを指定できるのでtypenameのほうが名称としてしっくりくる
2022/06/25(土) 08:38:53.00ID:hlZoB8IO
Onigmoの非包含オペレータのバグFixが来た

Fix absence operator #163
https://github.com/k-takata/Onigmo/pull/163

こういうのをサラっと直してしまう人はカッコイイね、nomotoさんありがとう!
292デフォルトの名無しさん
垢版 |
2022/06/25(土) 10:59:37.90ID:23CjKpU2
>>290
https://mevius.5ch.net/test/read.cgi/tech/1653135809/294-295
2022/06/28(火) 22:14:32.48ID:r8H2D3+U
>>291
> n("(?~|abc)", "abc") # ???
> x2("(?~abc|)", "abc", 0, 1) # ???

けんちゃん最初から気付いてるし
294デフォルトの名無しさん
垢版 |
2022/06/30(木) 19:21:01.41ID:EErfRwVa
●Regular Expressionの使用環境
python3

●検索か置換か?
検索

●説明
ErrorもしくはwarnもしくはInfoから始まり(CODE-xxx)で終わる最短の文字列を抜き出したいんですが
(Error|Warn|info):.*?\(\w+-\d+\)のように最短マッチを使っても1番最初のErrorから最後の(CODE-xxx)までが
マッチしてしまいます

●対象データ
Error: hoge
hoge
Warn: fuga
fuga
fuga
Info: hoge
fuga fuga (CODE-003)

●希望する結果
Info: hoge\n fuga fuga (CODE-003)
2022/06/30(木) 19:55:03.39ID:5rlmwso+
^(?:Error|Warn|Info)(?~^Error|^Warn|^Info)\(CODE-\d++\)
296デフォルトの名無しさん
垢版 |
2022/06/30(木) 20:03:45.67ID:VljocFtJ
>>294
msg_type_re = r"(?:(?:Warn|Info|Error):)"
print(re.findall(rf"{msg_type_re}(?:(?!{msg_type_re}).)*?\(CODE-\d+\)", s, flags=re.S))
2022/06/30(木) 20:43:19.23ID:WhOCvrbe
^(?:Error|Warn|Info):.*(?:\n\ \ .*)*?\(CODE-\d+\)
https://regex101.com/r/h3PLIu/1#TKStH49zfF1UDOMNbfx1RWny
298デフォルトの名無しさん
垢版 |
2022/07/01(金) 08:10:56.97ID:FKzEqydA
秋葉原店
専門店

住所
〒101-0021 東京都千代田区外神田4丁目3-3

↑の文字列を、置換で、
「秋葉原店,東京都千代田区外神田4丁目3-3」
と成形したいです。
思うに、
検索に、「店~~~~~~東京都」
置換に、「,」
とすれば出来そうですが、
「~~~~~~」には何を入れればよいでしょうか?
299298
垢版 |
2022/07/01(金) 08:20:24.06ID:FKzEqydA
ようは、
「店」と「東京都」の間にあれば、改行を含み、どんな文字列が何個はいろうが、「,」に変えたいのです。
よろしくお願いします。
2022/07/01(金) 08:32:58.06ID:fIXdHuhM
テンプレガン無視するな
ここはお前の為の便利屋じゃねぇよ
2022/07/01(金) 08:56:54.62ID:6Nj9t6DP
環境を言わない質問にはオーソドックスな正規表現で答えれば良いと思う

検索
(店)[\s\S]*(東京都)

置換
$1,$2
302298
垢版 |
2022/07/01(金) 17:16:41.56ID:FKzEqydA
>>300-301
すみません。 環境はwzエディター10 64bitです。
で、
(店)[\s\S]*(東京都)
これではダメでした。
2022/07/01(金) 17:18:10.65ID:wWlIpSvA
意地でもテンプレは使わない
2022/07/01(金) 17:27:00.65ID:iqig0nNh
スルーされにくいテンプレだから
スルーされてもいいんでしょう
305298
垢版 |
2022/07/01(金) 17:28:06.12ID:FKzEqydA
>>301
教えてくれてありがとうございます。
で、
wzの置換のタブを見ると、「\を文字として検索」と書いてあってそこにチェックが入っていて、そのチェックは外せません。
306298
垢版 |
2022/07/01(金) 17:33:49.42ID:FKzEqydA
>>303-304
すみません。 テンプレで質問すると、↓になります。

●Regular Expressionの使用環境
wzエディター10 64bit

●検索か置換か?
置換

●対象データ
秋葉原店
専門店

住所
〒101-0021 東京都千代田区外神田4丁目3-3

●希望する結果
秋葉原店,東京都千代田区外神田4丁目3-3
2022/07/01(金) 17:34:03.71ID:C/EjaQqR
別のエディタなりsed使え
2022/07/01(金) 17:48:08.39ID:iqig0nNh
>>306
Notepad++、Meryでは以下でいけた

(.+店)[\s\S]*〒\d{3}-\d{0,4}\s(.+)$
$1,$2
309298
垢版 |
2022/07/01(金) 17:51:33.51ID:FKzEqydA
>>308
ありがとうございます。しかしダメでした。
310298
垢版 |
2022/07/01(金) 17:53:57.09ID:FKzEqydA
しかし、
(.+店)[\s\S]*
ここまで削ると食いついてきます。
2022/07/01(金) 17:58:53.83ID:Dqsnfi22
複数行な時点で環境限られるよね
312298
垢版 |
2022/07/01(金) 17:59:18.72ID:FKzEqydA
ちなみに、Notepad++、Meryどちらも無料ですが、インストールするとするとどちらがよいでしょうか?
313298
垢版 |
2022/07/01(金) 18:08:28.54ID:FKzEqydA
ちなみに、Notepad++、Meryどちらも無料ですが、インストールするとすると正規表現的にはどちらがよいでしょうか?
2022/07/01(金) 18:09:36.54ID:C/EjaQqR
(?<=店)[^〒]*?〒\d{3}-\d{4}\s++
,
キャプチャする必要無くね?
対象データの例が悪い
他に何件もあって〒が無い場合があったりすると誤マッチするはず
315298
垢版 |
2022/07/01(金) 18:15:22.87ID:FKzEqydA
>>314
ありがとうございます。しかし、 (?<=店) これにすら食いつきません。
316298
垢版 |
2022/07/01(金) 18:58:55.44ID:FKzEqydA
Notepad++をインストールしました。
で、やりたいことは、
https://www.donki.com/store/shop_list.php?bsns=&pref=13
ここから、べーっとマウスでコピペして、
Notepad++に貼り付けて、店舗名,住所のcsvファイルを作りたいのです。
317298
垢版 |
2022/07/01(金) 19:04:57.22ID:FKzEqydA
(?<=店)[^〒]*?〒\d{3}-\d{4}\s++
これでほぼ出来そうです。 ありがとうございます。
318298
垢版 |
2022/07/01(金) 19:10:09.57ID:FKzEqydA
(?<=店)[^〒]*?〒\d{3}-\d{4}\s++
$1,$2

ちなみに、これって$1,$2という変数を使ってますよね?
(?<=店)[^〒]*?〒\d{3}-\d{4}\s++
この文のドコで代入してるのでしょうか?
2022/07/01(金) 19:16:15.59ID:TWCq9rfx
テンプレをヤイヤイいうだけの奴わろたわw
2022/07/01(金) 19:27:43.82ID:omlO1tMt
ページからならjsでやったら?って感じの話しだな
https://pastebin.com/M6LqV15b
2022/07/01(金) 19:30:02.45ID:23LeTIBQ
xy問題
2022/07/01(金) 19:51:17.10ID:6Nj9t6DP
住所からアニメイトの同志だと思いご協力させて頂きましたがアニメイトではなくドンキだと分かったので
すみませんがこれ以上ついて行くことは出来ません・・ 短い間でしたがありがとうございました、さよなら
323298
垢版 |
2022/07/01(金) 21:06:43.33ID:FKzEqydA
>>322
どうもです。 了解しました。

.+だと文字が何個あってもいいよ、です。
こういうので、
文字でも記号でも改行でも何個あってもいいよ、はないでしょうか?
あるとすれば、
店「」+住所
を、
,
に置換すればいいだけの話なんだけど。
2022/07/01(金) 22:01:19.33ID:TkUsKSE8
.(ピリオド)は改行コードを除く任意の1文字にマッチする
つまり.*や.+だと改行のところでストップするということ
2022/07/01(金) 22:28:36.91ID:oUsXu5GC
ピリオドはmオプションつけると改行にもマッチするやで
mオプションがついてるかは環境と指定したオプションによるやで
2022/07/01(金) 22:36:48.49ID:TkUsKSE8
mオプションじゃなくてsオプションなのでは?
2022/07/01(金) 22:50:04.22ID:oUsXu5GC
調べてきた
mオプションはRuby、oniguruma系、Meryはこれのはず
sオプションなのはPerl系
Notepad++/SciTEは専用オプションがある
らしい、やってみて確かめたほうがいいね
328298
垢版 |
2022/07/01(金) 23:07:58.13ID:FKzEqydA
ありがとうございます。では、
店.+東京都
に、mオプションを付けるとするとどう書けばいいのですか?
↓にはそれ系の記載がありません。

https://murashun.jp/article/programming/regular-expression.html
https://userweb.mnet.ne.jp/nakama/
2022/07/01(金) 23:25:18.67ID:oUsXu5GC
Notepad++のことならGUIのダイアログの左下の右に「.は改行と一致」てのがあるじゃろ
330298
垢版 |
2022/07/01(金) 23:40:21.16ID:FKzEqydA
>>329
ありがとうございます。Notepad++で、「.は改行と一致」にチェックをいれて、
店.+東京都
,
で、次を検索でポチると、
最初の東京都ではなく、最後の東京都、つまりほぼ全文を選択してしまいます。
2022/07/02(土) 00:04:51.39ID:BdV6t7uW
正規表現の基本は強欲
なるべく長い文字列にマッチしようとする
2022/07/02(土) 09:05:29.52ID:mrmEg2+h
> 基本は強欲

20年このスレにいて初めて知りました
2022/07/02(土) 09:58:17.51ID:At3W7bIA
20年正規表現使ってて強欲すぎて困ったことないの?
※ 用語として強欲はあまりいい意味には使わないから個人的には貧欲の方がいいなぁ
2022/07/02(土) 10:08:22.29ID:N6Y3zR8M
ひんよく? 貧
どんよく 貪欲
2022/07/02(土) 10:24:47.75ID:ophljRqK
そんなとっくに概出のこと言われても困ります
2022/07/02(土) 12:38:50.86ID:mrmEg2+h
貧欲の動作は考えてみればすごく非効率な気がしますね
10万文字の文章に対して「.*」を使ったら10万文字の末尾まで食ってから戻ってきますからね
2022/07/02(土) 13:18:37.74ID:At3W7bIA
>>334
すまん、素で間違ってたわ... orz
2022/07/02(土) 15:23:26.16ID:+K04BJMF
*+ 強欲 ++ 最大一致させたらバックトラックしない
* 欲張り + 最大一致させた後、残りの式が不一致になったらバックトラックする
*? 無欲 +? 欲張りと逆。最小一致後にバックトラック

バックトラック
条件を満たす範囲で探索
・欲張りは1文字放棄
・無欲は1文字追加
して試行する
339298
垢版 |
2022/07/02(土) 18:24:54.77ID:rrBNdWeF
てか、↓の文法的解説をできる方はこのスレにはいないのでしょうか?
(?<=店)[^〒]*?〒\d{3}-\d{4}\s++
2022/07/02(土) 18:51:12.29ID:+K04BJMF
(?<=店) 戻り読み。式(店)と次の文字の「間」の位置に一致。abcに対し(?<=ab)ならbとcの間に一致する。アンカー(^$)と同様
[^〒]*? 「〒」以外の文字に最小一致(無欲)
〒 「〒」の文字
\d{3}-\d{4} 「数字3つ」「-」「数字4つ」
\s++ 「\s」に最大一致(強欲)
341298
垢版 |
2022/07/02(土) 18:58:50.57ID:rrBNdWeF
>>340
ありがとうございます。
$1に(?<=店)を代入しているのはなんとなく理解できるのですが、住所の$2にはどの部分で代入しているのでしょうか?
2022/07/02(土) 19:30:02.98ID:UTWJe5+B
[^〒]*?〒は最小量指定子使わないで、[^〒]*〒でよいのでは?
この*は0回以上の「〒以外」の文字にマッチだから、貪欲であっても貪欲でなくても、結局一番初めに出てくる「〒」手前までしかマッチできない。
343デフォルトの名無しさん
垢版 |
2022/07/02(土) 19:38:03.70ID:UTWJe5+B
>>336
貪欲のほうがコストが常にかかるかというとそうじゃない。
場合によっては非貪欲のほうが大量にバックトラックが発生して計算コストかかることもある。
344298
垢版 |
2022/07/02(土) 19:41:17.46ID:rrBNdWeF
てか、不思議なことに、
1、検索文字列→ (?<=店)[^〒]*?〒\d{3}-\d{4}\s++   置換文字列→ ,
2、検索文字列→ (?<=店)[^〒]*?〒\d{3}-\d{4}\s++   置換文字列→ $1,$2
で、同じ結果が出るんです
345298
垢版 |
2022/07/02(土) 19:42:31.78ID:rrBNdWeF
つまり、2は文法的に間違ってる、ってことですかね?
346298
垢版 |
2022/07/02(土) 19:45:54.43ID:rrBNdWeF
てか、Notepad++はカシコイから、
置換文字列→ $1,$2
を、
置換文字列→ ,
と、置き換えて処理してるんですかね?
2022/07/02(土) 19:46:39.19ID:+K04BJMF
面白いから見守るわw
2022/07/02(土) 19:57:48.35ID:+K04BJMF
>>342
一致しない場合に無駄にバックトラックさせることになるだけなので
[^〒]*+〒
と強欲で良いんじゃね
2022/07/02(土) 21:11:04.97ID:FJKEiIOc
>>348
確かにマッチしない場合にバックトラックの発生を抑えるために強欲にするのはありだと思う。
ただ、PCREとかだと[^〒]*〒の場合、Auto Processが動作して勝手に強欲化するから書かなくてもいいはず。
今回のEditorはしらんけど。
2022/07/03(日) 11:46:22.30ID:DiSdIFQe
初心者のうちは強欲は使わないほうがいい気がする

そもそも鈍器のページから店名と住所を取り出すだけの正規表現を書く場合にキャプチャしない書き方や
バックトラックを抑制する書き方をする必要はない

「策士策に溺れる」になってるから質問者に何を教えるべきなのかもう一度考えるべし
2022/07/03(日) 12:00:27.48ID:J9cIk4yD
貪欲禁止って*や+を使うなってことけ?
2022/07/03(日) 12:44:06.06ID:HH+h1Cia
possessiveのことだろ
2022/07/03(日) 13:50:59.22ID:J9cIk4yD
手足をもぎ取られた気分や…
2022/07/03(日) 14:32:42.77ID:nkFK6+7O
>>350
初心者が強欲使わないでいつ強欲の動作を知るの?
それとも初心者はみんな量指定子を持つ環境を使うべきって主張かな?
2022/07/03(日) 15:36:23.88ID:ZjFQgG61
> 使わないほうがいい気がする
「気がする」でついつい無駄コード書いちゃう強迫性不安障害の人かな?

> 「策士策に溺れる」になってるから質問者に何を教えるべきなのかもう一度考えるべし
底辺コーダーが良く使う言い訳
(俺に分かりやすい) 平易なやり方しか認めない!(`・ω・´)キリッ
2022/07/03(日) 17:56:24.35ID:DiSdIFQe
正規表現を考えるときには複雑な情報を単純化する作業が必要になるんだがそういう意味では質問者のほうが才能がある
「店」と「東京都」という2つのキーワードさえ見つけられれば目的を果たせることを見抜いていた

それに対して回答者たちは単純だった依頼を複雑化させたあげく質問者を困らせ続けた
戻り読みを正規表現の先頭に置いてキャプチャを回避することが本当に処理量の軽減になっているのかも疑問
鈍器のページからテキストエディタで店名と住所を取り出すだけの作業に正規表現の高速化を考えるのはもはやコント

君らには問題を単純化する能力が足りないからその点を改善せよ
2022/07/03(日) 18:00:06.22ID:ZjFQgG61
>>356
>>340
店の直後から郵便番号まで、と十分に単純だと思うが君はこれが複雑なものに見えるのかな?
2022/07/03(日) 18:09:59.22ID:hqJYlR9w
>>356
取り敢えず君は書く文章を改善しよう
殆ど愚痴だよねそれ
2022/07/03(日) 18:20:19.30ID:K4HcDkkQ
どうしようもないケースを除いて「東京都」なんてのをハードコーディングするのは筋が悪いと言わざるを得ない
2022/07/03(日) 18:23:09.07ID:BZUl5BA7
それはともかく、キャプチャグループが無いのに気づいてないのを指摘してあげろよ
$1,$2に対応するものがないので両方ともヌルになってる
2022/07/03(日) 18:34:54.70ID:BC52HWP8
>>344
>>346
不思議だとかカシコイだとか面白すぎるんですけどw
それ書いてる>>314には$1なんてどこにも書いて無いのにw
2022/07/03(日) 19:05:13.97ID:ur8aI9T4
>>356
>>351,354についての答えが欲しい
2022/07/03(日) 19:53:34.01ID:RqS+SurZ
文章からして発達障害とかそのボーダーでしょ
鉄道マニアとか特撮マニアに多いタイプのガイジ
2022/07/03(日) 19:57:25.26ID:THTbKALg
>>359
あなたPG気質もわかるけど、
その位置が空欄となる可能性がないのであれば
どのみち47都道府県をORで並べるハードコーディングになるよw
2022/07/03(日) 19:58:39.99ID:BZUl5BA7
351は論外だろ
強欲を貪欲に変えてるし
366デフォルトの名無しさん
垢版 |
2022/07/03(日) 20:14:59.04ID:Qz5VC9/y
>>365
正規表現のコンテキストにおいて、強欲と貪欲にどんな違いがあるか教えて
2022/07/03(日) 20:15:30.32ID:nkFK6+7O
>>365
正規表現に関してはどっちも同じ
なぜなら元の英語greed(greedy)の直訳だから
辞書引けばわかるとおり、greedは強欲であり貪欲でもある
2022/07/03(日) 20:29:11.54ID:BZUl5BA7
言葉尻を捕らえても意味ないぞ
+,*を強欲とは言わん
2022/07/03(日) 20:37:36.27ID:BZUl5BA7
greedyは貪欲(欲張り)
Possessiveが強欲
2022/07/03(日) 20:38:07.23ID:7Xq6ZsUF
「強欲」と「最長一致」が別物ってことすら理解しないまま変な自説を垂れ流してることに気付いてないんだろうなあ
332あたりの皮肉もまったく通じてないみたいだし
2022/07/03(日) 20:38:53.41ID:BZUl5BA7
あれ、>>352で指摘されてるじゃん
2022/07/03(日) 20:39:33.16ID:nkFK6+7O
>>368
正規表現を理解してない自慢しなくていいから
2022/07/03(日) 20:45:47.16ID:nkFK6+7O
>>369
日本語に於ける欲深さは強欲>貪欲ってこと?
2022/07/03(日) 20:48:18.70ID:BZUl5BA7
具体例を挙げないとダメなのか?
ググることさえしないのか?
強欲の表現は
?+
*+
++
{n}+
{n,}+
{n,m}+
2022/07/03(日) 20:51:34.49ID:nkFK6+7O
納得いった
possessiveを強欲とした誤訳に基づく誤解だな
possessiveを強欲だと捉えてる人は331を誤りだと捉える、
翻ってgreedy, possessiveで理解してる人は貪欲と強欲が変わって何がおかしいのかすらわからない
2022/07/03(日) 20:53:24.55ID:DiSdIFQe
単純な話が複雑になってきたがこういうのが良くないんだ、プログラミングや正規表現をするなら特にな
単純な話になる方向にもっていくことを考えるべし

強欲の話を複雑化しようとしてる奴を見ればアホに見えるだろう、誰とは言わんが
377デフォルトの名無しさん
垢版 |
2022/07/03(日) 20:55:43.09ID:u4Kf+yAq
>>369
それどこのQiitaに書いてあったん?w
2022/07/03(日) 21:00:18.88ID:BZUl5BA7
正規表現では強欲といえば何を想起するのかってのは常識だよ
英語自慢はいいけど日本語も勉強してね
2022/07/03(日) 21:04:50.41ID:gASOhw8R
鬼車 欲張り(greedy)/無欲(reluctant)/強欲(possessive)
詳説正規表現第2版 欲張り/非欲張り/強欲量指定子
詳説正規表現第3版 欲張り(greedy)/控え目(lazy)/絶対最大量指定子(possessive)
入門正規表現 欲張り/控えめ/独占的

貪欲???
2022/07/03(日) 21:06:06.84ID:nkFK6+7O
常識って偏見の塊でしょ知ってる
2022/07/03(日) 21:09:06.26ID:BZUl5BA7
じゃあ、強欲でgreedyを指す日本語の解説をどこか例示してくれ
2022/07/03(日) 21:15:22.52ID:nkFK6+7O
そんなもの不要でしょ
国語事典に於いては強欲と貪欲に序列はない
英和辞典に於いてはgreedyは強欲ならびに貪欲
和英辞典に於いては強欲も貪欲もgreedy
むしろpossessiveの方こそ欲張りとか独占的って意味になる
そういう意味では入門正規表現の表記が正しいと言えるかもね
2022/07/03(日) 21:20:26.16ID:BZUl5BA7
正規表現に関してはどっちも同じ、正規表現を理解してない
と言った口で正規表現の専門用語じゃなくて日本語として云々と言うか?
強情ッ張りにも程があるな
2022/07/03(日) 21:32:22.16ID:nkFK6+7O
>>383
ヘルプで学んだから強欲とか貪欲とか書かれてなかったしね
greedyだのlazyだの辞書引きながら覚えた身からすりゃ貪欲も強欲も同じ意味なのもわかるだろ?
強欲と言えば何を想起するかって正規表現の常識はどこで学んだの?原書とか読まないタイプ?
2022/07/03(日) 21:33:16.77ID:JPaw0m1w
>>375
スッキリした
possessiveを強欲と訳した人がいたんだね
2022/07/03(日) 21:37:15.00ID:JPaw0m1w
possessiveって「独占欲が強い」って意味だから
含意も伝わる入門正規表現の「独占的」が一番いい訳だと思う
2022/07/03(日) 21:38:14.39ID:BZUl5BA7
強欲というのを専門用語にしてるわけだから誤訳と言っても仕方ないだろ
誤訳だから俺だけは強欲と貪欲は同じ取り扱いをするよで世間で通じるとでも思ってるのか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況