2017-04-19 18 views
2

の間のすべてを削除します。私はウェブスクレープを学んでいます。私はたくさんのデータを保持していますが、面倒な構造です。
私はこの形式の文字列のベクトルを持っています:
"9,55< U+00A0>x< U+00A0>1016"(今は私がそれを特別な構文だと思っています。なぜなら、 "U"の前にスペースを入れないと貼り付けられないからです) 私が取り組んでいるウェブサイトは "9,55 * 10^16"と書かれています。正規表現は<>

この文字列を数値変数、つまり95500000000000000に変更することです。 最初に、最初の "<"と最後の ">"の間のすべてを削除します。 以下は私の試みです。

gsub("<(.*?)>", "", vectorOfStrings) 

編集:文字列は「<」以来、"9,55\U{00A0}x\U{00A0}1016"を使用してRで発生する最良であると「>は、」文字列の実際のリテラルではありません。

+0

これはどの言語ですか? gsub()とは何ですか? – MrJLP

+0

@MrJLP:それは "R"言語です。 'gsub'は正規表現検索/置換関数です。 – r2evans

+0

あなたのPHPを使用している場合は、preg_replace javascript do // g何かをメモする必要があることがあります。< and >しかし<と>多分R言語のために// g – DrBrad

答えて

4

あなたが見ている文字はユニコード(UTF-8、私は思う)であり、Rの表現(豊富ではない場合)は小なり/より大きい表記です。

iconv(vectorOfStrings, "utf-8", "ASCII", sub = "") 

非翻訳対象をドロップしなければならない何か。それを削除するには、1つの方法はASCIIのテキストを「変換」することです。

+1

Yepp thats thats! :D 私はそれが私の質問の正しい形でそれを書くことができなかったので、それは何かのようだと思っていた。 SOはそれを「正しい」構造に自動的に変換しました。 ありがとうございます! – TKN

1

私は単純に「マッチすべてが、 『>』のような、または使用に「すべてのマッチ」あなたの貪欲を変更します。?それ怠惰(マッチ最小)にする

<[^>]*> or <.*?> 

または

をタグ付けするタグと一致するようにします
<.*?>.*?<.*?> 
+0

それはちょうど普通の文字列でしたが、私の場合はそれが違っていました:(@ r2evansの解決策を見てください) – TKN

+0

@TKN質問タイトル= Pに基づいてテキストバージョンを探しています – Tezra

+0

いいですね。それはいつも高く評価されています:D – TKN

1

これは

>vectorOfStrings = "9,55< U+00A0>x< U+00A0>1016" 
>vectorOfStrings1 = gsub("<[^>]+>","",vectorOfStrings) 
>vectorOfStrings1 
[1] "9,55x1016" 
+0

それは単なる普通の文字列でしたが、私の場合はそれは違っていました:( @ r2evansの解決策を見てください。 – TKN

0

これは、Webからの科学表記数をこすりするために私のコードです、数値に動作します:

library(magrittr) 

vectorOfStrings <- "9,55< U+00A0>x< U+00A0>1016" 

scrape_numeric <- function(x) { 
x %>% 
    gsub(">10", ">e+", .) %>% 
    gsub("<.*>", "", .) %>% 
    gsub(",", ".", .) %>% 
    as.numeric 
} 

scrape_numeric(vectorOfStrings) 

# [1] 9.55e+16 
関連する問題