Regular Expression(正規表現) Part15
レス数が1000を超えています。これ以上書き込みはできません。
Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part14
https://mevius.5ch.net/test/read.cgi/tech/1489511075/
次スレは>>980宜しく
天ぷら等>>2以降 コアに入れてしまった以上、気楽になくせないだけじゃないの 昔reで書いたコードを書き直さずに使えるのが最大のメリットだと思うけど 「後方互換を破壊するに足る理由」が無いので、そのまま残されている >>934
だってエスケープしてるなんて
おともだちに知られたら恥ずかしいし python2からpython3への後方互換の捨てっぷりを思えば、
さっさとreを捨ててregexが標準になってもおかしくないはずだが、そうなっていないのはなにか事情があるのかな? reで不便したことないけどregexにしかない有用機能ってなにがあるの? pythonistaでregexインストールしようとしたら、c言語使ってるんで無理だよ的メッセージが出ました。
そうなると、re使うしかないわけで、そういう意味では存在価値ありますね。 reがregexを取り込めばいいってだけなのでは?
少なくともreが対応してる範囲でregexも同様に使えるということだし
あまり大きいと組み込み用途とかでは難しいのかもしれないけど
urllibはそんな感じで後発を取り込んでるよね AHKで、文字列中の単語の間にスラッシュがある場合はその単語の後ろ(区切り文字やピリオドの前)に閉じ括弧を付けたいのだけど、例えばRegExReplaceを使って実現する方法を誰か教えていただけないでしょうか。
こんな、感じにしたいと思ってます。
変換前: aaa bbb/ccc ddd
変換後: aaa bbb/ccc) ddd (\w+\/\w+)
$1)
文字列に日本語が入るなら\wを適切なやつに変えて >>964
グループ化って、こうやって使うんでうね。すごく勉強になりましたし、非常に助かりました。ありがとうございます。 ●Regular Expressionの使用環境
javascript
●検索か置換か?
検索
●説明
abcとdefというキーワードが最大1回順不同で出現するのに一致したい
●対象データ
abc def→一致
def abc→一致
abc→一致
def→一致
→空白のみでも一致
→何もなくても一致
abc def g→異なる単語が入っていると不一致
簡単な書き方はありますか? >>966
var str = 'なんか';
str.replace(/abc|def/g, '');
if (str.trim() === '') console.log('一致');
else console.log('不一致'); str = str.replace(/abc|def/g, '');
だった ありがとうございます。
ちなみに正規表現だけで上記は可能ですか? javascript使うんだろ
何で他の式を使ったらダメなの?
まあorに空白を入れとけばtrimは不要かもね
あと最大1回とは2回出るとダメってことなのか?
abcabc→不一致? >>966
素直に
^ *(?:(?:abc)? *(?:def)?|(?:def)? *(?:abc)?) *$
じゃだめなの? abcabcはabcが2回でるので不一致です。
javascriptの場合教えてもらったコードで問題ないですね。
正規表現だけで表現できると便利だなーとおもったまでです。
>>971 ありだと思います。 967はabcabcに一致するんじゃないかなあ
^(?: |(abc|def)(?!.*\1))*$ >>973
こんな書き方できたんだ。知らんかった。 こんなスレがあったんですね
今後お世話になろうと思います^^ Pythonの正規表現を変数などに入れておき、他の正規表現の一部として再利用する方法ってあるのでしょうか。
第一の正規表現を
hoge =[abcd]
としてhogeに格納しておいて、
別の正規表現で
(【hoge】|[efg])
のように、【】の部分で変数を引用するイメージです。 >>976
普通に文字列で持っておいて結合するだけじゃダメなの?
hoge = r'[abcd]'
...
r'(' + hoge + r'|[efg])' >>966
試しに考えてみました。
問題あればご指摘ください。
abc defのときに、間の空白がどの程度許容されるのかがわかりませんが、とりあえず1文字の空白があってもなくても良い\s?、ということで考えます。
場合分けすると、
abcが冒頭に来るもの(defはあってもなくても可)
defが冒頭にくるもの(abcはあってもなくても可)
どちらもなく、空白はあってもなくても可
の3種類にわけられますから、
^abc\s?(def)?
^def\s?(abc)?
^\s?
であり、このどれかがあてはまればいいので、
(^abc\s?(def)?| ^def\s?(abc)?|^\s?)
となります。
^は3つに共通しているので、カッコの外に括り出してもいいですね。すると
^ (abc\s?(def)?| def\s?(abc)?|\s?)
となります。 3つを合成する時に間に変なスペースが入ってしまっていて、マッチを妨げていました。
^(abc\s?(def)?|def\s?(abc)?|\s?)
ですね。 >>977
それは盲点でした!
正規表現オブジェクトの再利用ということばかり考えていましたが、複数の正規表現に同じ文字列を代入すれば同一の効果が得られますね。
ありがとうございます。 >>978もですが色々アイデアありがとうございます。
空白の条件は書き忘れですね。
abcとdefの間は空白一つ以上、先頭、末尾は空白あっても無くてもOKでした。 >>981
そうであれば
^(abc\s+(def)?|def\s+(abc)?|\s?)\s?$
で良いと思います。
間の空白を1以上とし、
忘れていた行末$を補い、
パターンの後に空白があっても大丈夫なようにしました。 >>982
それ ' ABC DEF' みたいに先頭に空白があるケースにマッチしなくね? >>982
それ 'ABC' みたいに末尾に空白がないケースにマッチしなくね? >>984
ご指摘ありがとうございます。
大変勉強になりました
^\\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$
のように直しました。
abc のあとにdefが来るとき、
defのあとにabcが来るとき、
これらの場合のみ空白が必須なので、
空白と後に続くものを、まとめて括弧に入れるべきでした。 ^\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$
冒頭のドルマークが1つ多かったです。
すいません。
あとは、冒頭に\s?を置くのであれば、選択肢の3つ目は不要ですね。
仮に空白文字しかない場合、冒頭の\s?が行末までマッチしてしまいますから、選択肢3つ目で空白がマッチすることはない。
というわけで、3つ目の選択肢を消した別解を考えました。
^\s?(abc(\s+def)?|def(\s+abc)?)?\s?$ 何度もすいません。
行頭と行末は、*を使うつもりが、?を使ってたから変なコメントになってました。
^\s*(abc(\s+def)?|def(\s+abc)?)?\s*$
これで決定校です! それ見たけど大昔から結構どこにでもある様な表だよね
自意識過剰じゃね? 客観的に観てもコピられた可能性は高いと思うが
裁判で勝てるかどうかは微妙 そんなことより改変もまともにできないのはヤバい
正規表現の例 マッチする例
Coo+el Coopel
https://pbs.twimg.com/media/FC7n-5zaUAETKej.jpg パクられ元にパクられだ疑惑(はてブ情報)
http://web.archive.org/web/20210302113534/https://troutlurefishing.jp/regex.htm
パクられ元
http://web.archive.org/web/20210118220247/https://murashun.jp/article/programming/regular-expression.html
パクリ元
http://web.archive.org/web/20211030075247/https://coopel.ai/help-center/191 そもそもgooooooogleにしておかないでgo...gleにしてる時点で
元パクリサイト(今回の騒動の主)のパクリ確定だな アーカイブされた時間は真ん中が先だな
先後がよくわからんので、>>995の結論については取り消しておく
正規表現を使わない場合、同じ文字の繰り返しって、...以外ではどう表現する?
gogle, google, gooogle ... という例ならある程度わかるんだが このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 778日 21時間 37分 11秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。