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

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

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

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

Q&A

解決済

2回答

575閲覧

さくらエディターで3文字以下の英文字の前後にスペースを一つ追加する正規表現を書いています。しかし追加されるスペースの数が意図どうりになりません。

mitako

総合スコア1

正規表現

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

0グッド

0クリップ

投稿2023/01/11 08:34

 さくらエディターで3文字以下の英文字の前後にスペースを一つ追加する正規表現を書いています。

 簡単なモデルでトラブルの内容を以下に示します。()内の数字はスペースの数です:

置換前文字列:
xx aa xx aa aa xx aa aa aa xx
目的文字列:
xx aa xx aa aa xx aa aa aa xx
(2) (2) (2) (4) (2) (2) (4) (4) (2)

正規表現 置換前 (\W[a-z]{2}\W)
正規表現 置換後  $1($1の前後にひとつづつスペースがあります)
置換後文字列:
xx aa xx aa aa xx aa aa aa xx
(2) (2) (2) (2) (2) (2) (2) (2) (1)

上記 正規表現の誤りをご指摘下さい。

   
ヘディングのテキスト

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

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

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

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

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

yuma.inaura

2023/01/11 08:48

目的文字列はなぜスペース4個の部分があるんでしょう?
guest

回答2

0

text
やっとわかりました
正規表現以前の問題でした。お手数をかけました。

コード iiiiii aaaaaa

投稿2023/01/14 14:04

kysh

総合スコア2

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

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

0

ベストアンサー

空白がよくわからないので、文字列を書いている部分をコードブロックのなかに書いてください。そうすると等幅フォントになります。
</> のボタンを押して、その「コード」と挿入される部分に文字列を書く。「ここに言語を入力」のところは「text」とでもしておく。

正規表現が間違っているのは、\Wが空白を食ってまう所です。次のマッチが空白の次から始まるので、対象の英字列が1つ飛ばしになってしまうんでしょう、
単語境界\b\w\Wの境目にマッチ)が使えるようなので、(\b[a-z]{2}\b)でしょうか。

さくらエディターで3文字以下の英文字の前後にスペースを一つ追加する正規表現を書いています。

と書いてありますが、コードは2文字だったので、そのまま2文字にしてあります。
また、書いてある通りにしようとすると、つまり、ab3abの前後に空白を追加して ab 3にするのだと、もっと長くなりますが、元が\Wを使っているので、そういうケースは無いと言うことですよね?

投稿2023/01/11 09:21

編集2023/01/11 09:23
otn

総合スコア84555

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

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

mitako

2023/01/11 13:18

 早速回答をいだだkました。ありがとうございました。じつは正規表現を始めてからまだ1週間なので\bの存在を知りませんでした。また\Wが「空白を食う」とは知りませんでした。モデルを簡単にするために3文字以下を2文字に数字は含まないことを勝手に想定していました。  早速(\b[a-z]{2}\b)をトライしてみました。結果は以下となりました。 xx aa xx aa aa xx aa aa aa xx 実は「文字列を書いている部分をコードブロックのなかに書いてください」の意味がわかりません。言葉で説明すると今度の結果は全ての文字間が3個のスペースになったということです。さくらエディタの画面を添付したいのですがコメント欄では出来ないのでしょうか。エディタ上では等幅フォントCourier Newを使いました。視覚的にも結果がよく認識されました。以上の結果をベースに再度トライしてみます。
mitako

2023/01/11 14:16

yuma.inaura様から: 目的文字列はなぜスペース4個の部分があるんでしょう? とのご質問がありました。teratail自身の使い方がわからないのでここでお答えします。  私の間違いでした。「簡単なモデル」では各文字間が一つのスペースなので両側からひとつづつ追加されればスペースは3個です。otn様からのご指示にもとづくトライも全て3で正解でした。あとは簡単モデルから現実モデルへの拡張です。皆様のおかげで全くの初心者でも問題解決の道が拓けました。  実は語学の勉強でテキストの各単語の下に訳語や文法事項を書き入れたいのですが短い単語が連続するとスペースが足りなくなります。これが問題提起でした。微調整としては追加スペースの数を1文字単語ではスペースを3個、2文字では2個、1文字でも両側が5文字以上の単語ではスペースは追加しないなどの事項が考えられます。カーニングへの配慮も必要になるかもしれません。たまたま正規表現と言語学者チョムスキーとの関連に関する著書があることを目にしました。勉強の励みになります。皆様ありがとうございました。
otn

2023/01/11 16:24

> 実は「文字列を書いている部分をコードブロックのなかに書いてください」の意味がわかりません。 そうかも知れないと思って、その後に具体的な説明を書いたのですが、それもわからないのですか? > また\Wが「空白を食う」とは知りませんでした。 \Wが空白にマッチすると知らなかったののなら、\Wは何だと思って書いたのでしょう?
kysh

2023/01/14 00:41

 回答が遅れまして申し訳ありません。パソコンのトラブルで2日かかりました。  コードブロックが何だかわかりません。まったくの初心者で申し訳ありません。  \Wが「空白を食う」件に関しては私のの誤解でした。正規表現を書き直して目的の結果が得られました。少し現実に近いモデルにしました。 文字列 xxx aa xxx aa aa xxx a a a a xxx 正規表現 \b([a-z]{1,2])\b $1    ($1の前後にスペースがひとつづつあります) 置換後の文字列 xxx aa xxx aa aa xxx a a a a xxx (2) (2) (2) (2) (2) (2)(3) (3) (3) (2)  以上です。大変お手数をかけました。
otn

2023/01/14 02:35 編集

> コードブロックが何だかわかりません。まったくの初心者で申し訳ありません。 ということですが、 > > 実は「文字列を書いている部分をコードブロックのなかに書いてください」の意味がわかりません。 に対して、 > そうかも知れないと思って、その後に具体的な説明を書いたのですが、 と書いたのですが、この文章の意味すらわからないと言うことですよね? おそらくあなたは「コードブロック」という知らない言葉を見てパニックに陥ってるだけだと思うので、その文を通り過ぎて、次の </> のボタンを押して、その「コード」と挿入される部分に文字列を書く。「ここに言語を入力」のところは「text」とでもしておく。 を読みましょう。
kysh

2023/01/14 12:08

\(2) (3) (2)\ \ &1 \ と書くことですか。 「ここに言語を入力」とはなにをさすのかわかりません。このようなメッセージボックスがあらわれるのですか。
otn

2023/01/14 12:48

「</> のボタンを押す」がわかりませんか?? 質問文入力欄の上に、 B I Sに横棒 H " </> ・・・・ というボタンが並んでいると思うのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問