2016-07-25 19 views

答えて

3

を行うときに^.|(\d+)(?!.*\d)を使用した場合

'ABCD some random words and spaces 1234'は、パターンが出力のみ'A4'最初の文字と一致し、subでそれを削除し、削除しますでしょう必要があります最初の文字と最後の1桁の数字が置換パターンに逆参照なしでgsubで使用されている場合。 this pattern demoを参照してください。

あなたは

sub("^(.).*(\\d).*$", "\\1\\2", "ABCD some random words and spaces 1234") 

を使用することができますがR demoregex demoを参照してください。

このTRE正規表現パターンが一致します。

  • ^を - 文字列の先頭
  • (.) - グループ1は、任意の文字
  • .*キャプチャ - 0+最後までできるだけ多くの任意の文字を...
  • (\\d) - グループ2の数字のキャプチャ
  • .* - 残りの文字列
  • $ - 文字列の最後。

\\1\\2置換パターンは、グループ1とグループ2でキャプチャした値を結果に戻します。

+0

ありがとうございます。副次的な質問として、人々はRegexをどのように学びますか?オンラインでは多額のリソースがあるようですが、取り込むことは大変です。 – Clarinetist

+1

問題があります。 Base Rでは、 'perl = TRUE'引数を使用しない場合、TRE正規表現(' grep'、 'sub'など)の中から選択できます。あなたがそれを使うなら、あなたはPCRE正規表現のフレーバーを使わなければなりません。 stringr/stringiなどでは、ICU正規表現について読む必要があります。 Web上には多くのリソースがありますが、「公式」ページがあります。 [* PCRE - Perl互換正規表現*](http://www.pcre.org)、[* ICU *](http://userguide.icu-project.org/strings/regexp)、[* TRE *] (http://laurikari.net/tre/documentation/regex-syntax/)。 –

関連する問題