HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
1203
あいそとーぷ文字列の文頭、文尾の"を正規表現で消したい。2解決


あいそとーぷ

リンク

2024/12/3(Tue) 12:05:48|NO.102604

以下のように、文頭・文尾の"を一文字ずつ消したいのですが、なかなかうまくいきません。
必ず"があればいいのですが、CSVを取得するために使うので"が無いこともあり正規表現を使うことを試みました。
恐らく使い方が間違っているのですが、どこが間違っているのか教えてほしいです。


#include "mod_regexp.as" a = {" """で文を囲むと、"文字列"になります。" "} mes a // """で文を囲むと、"文字列"になります。" mes replace(a, "(\"^?)(.+)(\"$?)", "$2") //理想-> ""で文を囲むと、"文字列"になります。 //現実-> """で文を囲むと、"文字列"になります。"



この記事に返信する


GENKI

リンク

2024/12/3(Tue) 23:18:05|NO.102610

生成AIは正規表現の生成が得意らしいと聞いたことがあります。聞いてみるのもいいかもしれません。

と言いつつ、AIに聞くまでもないので書いてみました。こんな感じでしょうか。前後にスペースが付いていたのでそれも消しときました。

mes replace(a, "(^ *\")|(\" *$)", "")
csvの読み込み処理は結構めんどくさいので、先人が作ったものを流用するのがよいと思います。

https://dev.onionsoft.net/seed/info.ax?id=2483

https://wiki.hsp.moe/String%EF%BC%8FCSV%E5%BD%A2%E5%BC%8F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF.html



("^?)(.+)("$?) で見つかった文字列全体を $2 つまり(.+)で見つかった文字列に置き換えようとしているのだと思います。何となく方針は理解できました。「文頭・文尾の"を一文字ずつ消したい」の通りの実装ではないのでちょっと回りくどいかなと思いました。間違っている部分が知りたいとのことなので、このまま掘り下げてみます。

結果としては、検索結果が無かったので、何も置換が行われていないものと思われます。
・まず「^?」という表現はありません。行頭のダブルクォーテーションならこうです。「^"」
・(.+) 任意の文字の繰り返し1回以上です。空文字の場合もありえるので(.*)とした方がいいでしょう。
・("$?)の$は行末を意味します。「"$」で行末のダブルクォーテーションです。最後に「?」が付くことで正常に動作していません。

おそらくやりたかったのはこうだと思います。(^")(.+)("$)

mes replace(a, "(^\")(.*)(\"$)", "$2")
ただし、提示されたスクリプトは前後にスペースが付いているのでこれだと動きません。



あいそとーぷ

リンク

2024/12/4(Wed) 12:08:25|NO.102615

返信ありがとうございます!
^は語頭につけるのですね、正規表現について知見が深まりました!

ご紹介していただいたCSVモジュール、複雑な文字列も正確に読み取れてめちゃ便利ですね
使ってみることにします!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.102604への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.