次の方法で単語の部分文字列を取得します。
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で結果を取得するより簡単な方法はありますか?
次の方法で単語の部分文字列を取得します。
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で結果を取得するより簡単な方法はありますか?
確かに、使用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 )