2017-09-01 13 views
-4

Rの正規表現を検索して、アルファベット2文字の間の数字を置き換えます。たとえば、次のように、m3を置き換える:Rのアルファベット間の数字を置き換える正規表現

  • Sa3pleSample

  • Sample1.3 3は、アルファベットの文字の間ではありませんので、Sample1.3

    • この言葉は同じstatysままになっ

3mに置き換えるために、以下のRコードで試しましたが、部分的にしか動作しません。

1つの問題は、正規表現が一致する場合、一致する行を置換するのではなく、最初の行を置換するたびにcol3になることです。確かに、正確に何が失われていますか。

df$col3[grep('[a-zA-Z][3][a-zA-Z]|[3][a-zA-Z]',df$col3)] <- gsub('[3]+', 'm', df$col3) 
+3

は、研究の最小量を行ってください学ぶためにこのsiteを使う - プレーンなコードの書き込み要求がうまく受信されませんここに。 [参考 - この正規表現の意味]を参照してください(https://stackoverflow.com/q/22937618/205233) – Filburt

+0

私はあなたにコードを書くことができますが、それはあなたに証明を表示せずに答えを出すことを教えてくれます何かを試した。代わりに、この作業を完了するために必要なすべての情報を提示します。 '(') '(')はそれを閉じます(構文は '(...)'で、省略記号はキャプチャしたい* something *に置き換えられます)。 '\ w'は任意の* word *文字と一致し、' \ d'は任意の* digit *と一致します。 '+'は前の文字の選択を1と無制限の間に含める必要があることを指定する量指定子です。 – ctwheels

+0

私の前のコメントを続けるには、正規表現の置き換えで、 '$'の後ろにキャプチャグループを指す数字が続きます。したがって、キャプチャグループ '(...) 'がある場合、' $ 1'はキャプチャされたコンテンツを指します。いくつかの正規表現を書いて、あなたの質問を更新しようとすると、あなたは**何か試したことを示すように適切な応答を得る可能性が高くなります**。結局のところ、私たちは自分自身でさえしようとしない人を助けようとするのはなぜですか?試行錯誤の証拠を表示して、あなたの答えを得るでしょう。 – ctwheels

答えて

0

正規表現は難しいです

pos <- "Sa3ple" 
neg <- "Sample1.3" 

gsub("([a-zA-z])\\d([a-zA-z])", "\\1m\\2", pos) 
"Sample" 

gsub("([a-zA-z])\\d([a-zA-z])", "\\1m\\2", neg) 
"Sample1.3" 

説明

(...) is group, which is referenced with \\1, \\2, etc 
[a-zA-Z] is lower and uppercase letter (only 1) 
\\d is any digit (add + or {2}) to identify more than 1 digit 

私は

関連する問題