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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

LaTeX

LaTeXは、レスリー・ランポートが開発したテキストベースの文書整形システムです。 電子製版ソフトウェアである「TeX」にマクロパッケージを組み込む形で構成されており、 通常のTeXより扱いやすくなっているのが特徴です。

Q&A

解決済

3回答

1013閲覧

正規表現で`$`で囲まれた部分にマッチングさせたい

nakasu

総合スコア5

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

LaTeX

LaTeXは、レスリー・ランポートが開発したテキストベースの文書整形システムです。 電子製版ソフトウェアである「TeX」にマクロパッケージを組み込む形で構成されており、 通常のTeXより扱いやすくなっているのが特徴です。

0グッド

1クリップ

投稿2022/02/10 15:02

編集2022/02/10 17:06

正規表現で$記号で囲まれた部分のみにマッチングするにはどのように書けば良いでしょうか。

例えば、

tex

1ほげほげ。 2$r = 3$であり$z = 4r^2$でして\hoge{roll cake}だから 3$f(r) = 5r$なので\iroha{}と言うcreator。

みたいな文字列から\hoge{roll cake}\iroha{}creatorに含まれるrには反応せず、r = 3z = 4r^2f(r) = 5rに含まれるrだけを一括でXに変換したいです。

$ $ではなく開始と終了が異なる括弧( )とかであればすぐにできると思いますが、同じ文字だと内外を判定するのは難しいですか?

一応、$記号は文字列中に必ず偶数回しか現れず、奇数番目と偶数番目の間を「内側」と仮定してもらって大丈夫なのですが。

エディタのvscodeの置換機能で簡単にできればなという思いなので、ガッツリ文字列処理するプログラムを書くのはNGとさせてください。

以上、いかがでしょうか。

補足

上の例では少し条件を緩くしてしまったみたいなので、もう少し厳しい変換対象の文字列を以下に示します。

tex

1ほげほげ。 2$r = 3$であり$z = 4r^2$でして\hoge{roll cake}だから 3$f(r) = 5r$なので\iroha{}と言うcreator。 4$s = 3$ run $\tr A$ほげほげorzorzです。$g(r) = \create{3r} + \func{1+r}$もお願いします。

こんな感じの文字列で$内のrを置換したいです。

あと、$内であっても$\create{3r}$\create 部分のrは置換せず、{3r}の方のrは置換対象としたいです。

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

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

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

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

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

guest

回答3

0

$$の内側に改行がないことを前提に、「行頭から偶数個の$があった後の$の後の最初のr」を置換します。

検索^(([^$]*\$[^$]*\$)*?[^$]*\$[^$]*?)r
置換$1X
1行について1つずつしか置換できませんが、何度かreplaceAllボタンを押すことで変更できます。

投稿2022/02/10 16:40

otn

総合スコア86277

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

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

nakasu

2022/02/10 16:49

回答ありがとうございます。 参考になりました!
guest

0

ベストアンサー

もう少しきれいな書き方ができそうですが、とりあえずこれでどうでしょうか。

検索文字列:(\$.*?)(r)(.*?\$)
置換文字列:$1X$3

投稿2022/02/10 15:45

segavvy

総合スコア1038

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

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

otn

2022/02/10 16:31 編集

$s = 3$ run $r = 3$であり$z = 4r^2$でしてhoge{roll cake}だから とかで駄目ですね。
nakasu

2022/02/10 16:35

ありがとうございます。とても参考になりました
segavvy

2022/02/10 16:39 編集

あ、ほんとですね。otnさん、ご指摘ありがとうございます。 よくみたらそれ以前に $f(r) = 5r$ のようにrが2箇所出てくるのもダメでした。 nakasuさん、不十分なので気をつけてください。中途半端ですみません……
nakasu

2022/02/10 16:44

あ、ごめんなさい。すれ違いで解決済みにしちゃいました。 でもまあ、あとはなんとかなりそうなのでこちらで考えます。 ありがとうございました!
guest

0

segavvyさん回答ありがとうございました。
質問文に書いた例ではそれでgoodでした。

置換したい文字rが含まれないような$hoge$もあることを書き忘れていましたが、少し弄って
(\$[^\$]*?)(r)([^\$]*?\$)とするだけで対応できたので、これで解決とさせていただきます。

他に考えて下さった方もありがとうございました。

投稿2022/02/10 16:41

nakasu

総合スコア5

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

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

otn

2022/02/10 16:50

$s = 3$ run $r = 3$であり$z = 4r^2$でしてhoge{roll cake}だから への対応は出来てないと思いますが、良いのでしょうか? run が Xun になってしまう。
nakasu

2022/02/10 16:55

確かにそれでは困りますね... 解決済みとなっちゃいましたがまだ議論できるのでしょうか。 質問に少し補足を加えてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問