1

次の方法で単語の部分文字列を取得します。

 word="xyz9874"
 pattern="[0-9]+"
 x=gregexpr(pattern,word)
 substr(word,start=x[[1]],stop=x[[1]]+attr(x[[1]],"match.length")-1)
[1] "9874"

Rで結果を取得するより簡単な方法はありますか?

4

1 に答える 1

3

確かに、使用gsubして後方参照してください:

gsub( ".*?([0-9]+).*", "\\1", word )

説明: ほとんどの正規表現の実装で\1は、一致した最初のサブパターンへの後方参照です。サブパターンは括弧で囲まれています。R では、使用している引用符の種類に関係なく、バックスラッシュをエスケープする必要があります。

「拡張された」正規表現のイディオムである疑問符は、指定された正規表現パターンが貪欲であってはならないことを意味します。つまり、文字列をできるだけ少なくする必要があります。そうしない.*と、パターン内の.*([0-9]+)が一致xyz987し、([0-9]+)が一致し4ます。別の方法として、次のように書くこともできます

gsub( ".*[^0-9]+([0-9]+).*", "\\1", word )

しかし、数字で始まる文字列には問題があります。

ところで、代わりに、または、実際には次のように[0-9]記述できることに注意してください。\d\\d

gsub( ".*?(\\d+).*", "\\1", word )
于 2012-10-17T09:03:12.007 に答える