2017-09-29 32 views
2

R(v3.4.1)の文字列から緯度、経度、ラベルを抽出しようとしています。私の考えは、正規表現が行く方法であり、stringrパッケージにはキャプチャグループを抽出する機能があるので、これは使用するパッケージだと思っていました。問題は、私が解釈できないというエラーを受けていることです。どんな助けもありがとう。正規表現グループのキャプチャ

ここに、情報を抽出したい文字列の例を示します。ラベル(Adelbert Hall)とともに、最後の緯度(41.505)と経度(-81.608333)を取得したいと思います。ここで

a <- "Case Western Reserve University campus41°30′18″N 81°36′30″W/41.505°N 81.608333°W/41.505; -81.608333 (Adelbert Hall)" 

は、私は私が興味を持ってフィールドをつかむために作成した正規表現である

​​3210

さて、私が使用して文字列の正規表現に一致しようとすると:。

s <- str_match(a,coordRegEx) 

私は次のエラーを取得する:

Error in stri_match_first_regex(string, pattern, opts_regex = opts(pattern)) : Incorrect Unicode property. (U_REGEX_PROPERTY_SYNTAX)

私の推測では、このエラーはRegexパターンと関係がありますが、ドキュメントとWeb検索を使用すると、私はそれを解読できませんでした。

答えて

4

としてそれを必要とする場合は、現在のコードを持ついくつかの問題があります。

  • (?#:...)はそのコメントですが、正規表現にx修飾子を渡した場合にのみ許可されます
  • 改行文字以外の任意の文字と一致する略記文字は、ICU regex library(これは名前付き文字に一致する\N{UNICODE CHARACTER NAME}をサポートしています)によってサポートされていません。 \N.に置き換えることができます。

    > a <- "Case Western Reserve University campus41°30′18″N 81°36′30″W/41.505°N 81.608333°W/41.505; -81.608333 (Adelbert Hall)" 
    > coordRegEx <- "(?x)(\\d*\\.\\d*)(?#Capture Latitude);\\h(-\\d*\\.\\d*)(?#Capture Longitude).*\\((.*)(?#Capture Label)\\)" 
    > s <- str_match(a,coordRegEx) 
    > s 
    
    [,1]           [,2]   [,3]   [,4]   
    [1,] "41.505; -81.608333 (Adelbert Hall)" "41.505" "-81.608333" "Adelbert Hall" 
    

はあなたの固定されたアプローチを参照してください。

1

我々は、文字列出力

sub(".*\\/\\s*", "", a) 
#[1] "41.505; -81.608333 (Adelbert Hall)" 

が必要な場合は、我々は別の

strsplit(sub(".*\\/\\s*", "", a), ";\\s*|\\s*\\(|\\)")[[1]] 
#[1] "41.505"  "-81.608333" "Adelbert Hall" 
関連する問題