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

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

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

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

Q&A

解決済

1回答

3753閲覧

正規表現を使った置換で、特定の文字で囲まれた文字列が連続する場合について

MJun.21

総合スコア8

正規表現

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

0グッド

0クリップ

投稿2018/02/12 16:45

前提・実現したいこと

正規表現の使える置換で、空白や改行で区切られた数字に.0を付け加えたい。
期待している動作は次のようなものです。

置換前

hoge 123 hoge fuga456 78.9 123 123 123 123

置換後

hoge 123.0 hoge fuga456 78.9 123.0 123.0 123.0 123.0

発生している問題・エラーメッセージ

4行目のように置換したい数字が連続すると、マッチする文字列の最後と、次のマッチする文字列の最初が被るため、1回だけの置換では全て置換することが出来ませんでした。

hoge 123.0 hoge fuga456 78.9 123.0 123 123.0 123

同じ処理を2回繰り返せば期待する結果が得られるのですが、これを1回で全て置換することは出来るでしょうか?

該当のソースコード

検索する文字列

([  \n]|^)([0-9]+)([  \n]|$)

置換後の文字列

$1$2.0$3

試してみたこと

繰り返しを使って(([  \n]|^)([0-9]+))+([  \n]|$)([  \n]|^)([0-9]+)(([  \n])([0-9]+))*([  \n]|$)などを考えてみましたが、うまくいきませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

すみません、teratailで参考になる質問を見つけてすぐに解決しました。
正規表現 挟まれた文字を取得

先読み、後読みを使い次のように変更したらうまく動きました。
(?<=[  \n])([0-9]+)(?=[  \n])

投稿2018/02/12 17:10

編集2018/02/12 17:11
MJun.21

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問