rのstring and and on resの終わりの開始と終わりの末端の間にある文字のみを抽出します。 -- r フィールド と regex フィールド と text-extraction フィールド と stringr フィールド と stringi フィールド 関連 問題

Extract only the characters that are between opening and ending parantheses in the start and end of a string in R












0
vote

問題

日本語

私はすべて次の形式の文字列を持っています:

<事前> <コード> mystrings <- c( "(ABFUHIASH)THISISAVERYLONGSTRINGWITHOUTANYSPACES(ENDING)", "(SECONDSTR)YETANOTHERBORINGSTRINGWITHOUTSPACES(RANDOMENDING)", "(JOWERIC)THISPARTSHOULDNOTBEEXTRACTED(GETTHIS)", "(CAPTURETHIS)IOJSDOIOIADSNCXZZCX(IJFAI)" )

元の mystrings の開始と終わりの両方で括弧内にある文字列をキャプチャする必要があります。

したがって、変数 start は、上記の各文字列のための開始文字を同じインデックスで格納します。結果はこれになります:

<事前> <コード> start[1] ABFUHIASH start[2] SECONDSTR start[3] JOWERIC start[4] CAPTURETHIS

および同様に、 mystrings の各文字列の終わりは end

に保存されます。 <事前> <コード> end[1] ENDING end[2] RANDOMENDING end[3] GETTHIS end[4] IJFAI

括弧その自体は捉えられないでください。

R?

でこれを迅速に行う方法/機能はありますか

<コード> stringr::word および<コード> stringi::stri_extract を試してみましたが、非常に奇妙な結果が得られています。

英語

I have many strings that all have the following format:

mystrings <- c(   "(ABFUHIASH)THISISAVERYLONGSTRINGWITHOUTANYSPACES(ENDING)",   "(SECONDSTR)YETANOTHERBORINGSTRINGWITHOUTSPACES(RANDOMENDING)",    "(JOWERIC)THISPARTSHOULDNOTBEEXTRACTED(GETTHIS)",    "(CAPTURETHIS)IOJSDOIOIADSNCXZZCX(IJFAI)" ) 

I need to capture the strings that are inside parentheses both at the start and the end of the original mystrings.

Therefore, variable start will store the starting characters for each of the above strings with the same index. The result will be this:

start[1] ABFUHIASH  start[2] SECONDSTR  start[3] JOWERIC  start[4] CAPTURETHIS 

And similarly, the ending for each string in mystrings will be saved into end:

end[1] ENDING  end[2] RANDOMENDING  end[3] GETTHIS  end[4] IJFAI 

Parentheses themselves should NOT be captured.

Is there a way/function to do this quickly in R?

I have tried stringr::word and stringi::stri_extract, but I am getting very strange results.

</div
              

回答リスト

2
 
vote
vote
ベストアンサー
 

これには<コード> stringr ライブラリを使用できます。たとえば

です <事前> <コード> library(stringr) mm <- str_match(mystrings, "^\(([^)]+)\).*\(([^)]+)\)$") mm

一致は、キャプチャグループ内の文字列の先頭と終わりの括弧の間のものを見つけて、容易に抽出できるようにします。

文字行列を返し、2番目と3列目を望むようです。 <コード> mm[,2:3]

<事前> <コード> [,1] [,2] [1,] "ABFUHIASH" "ENDING" [2,] "SECONDSTR" "RANDOMENDING" [3,] "JOWERIC" "GETTHIS" [4,] "CAPTURETHIS" "IJFAI"
 

We can use the stringr library for this. For example

library(stringr) mm <- str_match(mystrings, "^\(([^)]+)\).*\(([^)]+)\)$") mm 

The match finds the stuff between the parenthesis at the beginning and end of the string in capture groups so they can be easily extracted.

It returns a character matrix, and you seem to just want the 2nd and 3rd column. mm[,2:3]

     [,1]          [,2]           [1,] "ABFUHIASH"   "ENDING"       [2,] "SECONDSTR"   "RANDOMENDING" [3,] "JOWERIC"     "GETTHIS"      [4,] "CAPTURETHIS" "IJFAI" 
</div
 
 
 
 
0
 
vote

これはあなたのために働くかもしれません:

<事前> <コード> > regmatches(mystrings,gregexpr("\(.+?\)",mystrings)) [[1]] [1] "(ABFUHIASH)" "(ENDING)" [[2]] [1] "(SECONDSTR)" "(RANDOMENDING)" [[3]] [1] "(JOWERIC)" "(GETTHIS)" [[4]] [1] "(CAPTURETHIS)" "(IJFAI)"

e.g。、あなたが可能な末尾を抽出するために:

<事前> <コード> lapply(x,tail,1)
 

Something like this might work for you:

> regmatches(mystrings,gregexpr("\(.+?\)",mystrings)) [[1]] [1] "(ABFUHIASH)" "(ENDING)"     [[2]] [1] "(SECONDSTR)"    "(RANDOMENDING)"  [[3]] [1] "(JOWERIC)" "(GETTHIS)"  [[4]] [1] "(CAPTURETHIS)" "(IJFAI)" 

E.g., to extract endings you could:

lapply(x,tail,1) 
</div
 
 

関連する質問

3  RでMaplyをループする方法は?  ( How to loop through mapply in r ) 
mapply 関数をRで使用して文字列を連結しようとしています。ただし、 mapply 関数では、1つの文字列は変数になるようにします。私は以下のコードのスニペットを持っています: <事前> <コード> strings<-data.frame(x=c("d...

0  rのstring and and on resの終わりの開始と終わりの末端の間にある文字のみを抽出します。  ( Extract only the characters that are between opening and ending parantheses in t ) 
私はすべて次の形式の文字列を持っています: <事前> <コード> mystrings <- c( "(ABFUHIASH)THISISAVERYLONGSTRINGWITHOUTANYSPACES(ENDING)", "(SECONDSTR)YETAN...

12  分割繰り返し区切り文字を維持します  ( Split keep repeated delimiter ) 
stringi パッケージを使用して、区切り文字を分割してください(潜在的に区切り文字が繰り返される)まだ区切り文字を維持します。これはこの質問に似ています私はmoonsを尋ねました: r split区切り文字(分割)区切り文字(分割)を維持しますが、区切...

0  stri_unescape_unicode()はいくつかの文字で失敗します  ( Stri unescape unicode fails on some characters ) 
私はRでUnicode文字を変換することに問題があります。このアプローチですが、 stri_unescape_unicode < / CODE>ライブラリ stringi は、場合によっては正しい値を返しません。正しい値が言葉であるべき例を示すTomáš: <...

5  ラテン語を古代のギリシャ文字に翻訳します  ( Transliterate latin to ancient greek letters ) 
A.ここでICUのTranshiteRatorに依存する<コード> stringi パッケージを使用して、ラテン文字をギリシャ文字に変換する簡単な方法 <事前> <コード> library(stringi) stri_trans_general("abcd...

0  R.を使ったstr_c  ( Str c using in r ) 
誰かがこの最終行を構築しようとしている間私を助けてください: <事前> <コード> [1] ("mercury" AND "earth" AND "Jupiter" AND "Uranus" AND "Pluto?") 以下のコードを使用して <事前> ...

-2  Rの誤解  ( Regex misunderstanding in r ) 
GSUBやStringRを理解していないようです。 例: <事前> <コード> > a<- "a book" > gsub(" ", ".", a) [1] "a.book" 大丈夫です。しかし: <事前> <コード> > a<-"a.book" ...

2  Write.csv()Windows 10以外のMac OSからの異なる結果を書きますか?  ( Write csv writes a different result from mac os than from windows 10 ) 
RSVに印刷されたときに完全に正常に見える文字列は、CSVに書き込まれてExcelで開かれたときに奇妙な文字として表示されます。 再現可能な例 次に、文字列<コード> "a wit" として表示されるオブジェクトを生成してから、それをCSVに書き込みます。...

1  StringiのSTRI_REPLACE_FIRST_REGEXの取り替えは正規表現として見られない  ( Stringis stri replace first regexs replacement not seen as a regex ) 
私は最初の一致パターンを対応する置換と交換しようとしている文字列を持っています。例:下のマイ例: bb が最初に見つかった場合は、 foo で置き換え、他のものを置き換えませんが、 cc が見つかった場合まず、<コード> bar で置き換え、他のものを置き換え...

0  リスト構造パターンに基づいて新しいリストを作成します  ( Create new lists based on list structure pattern ) 
このようなデータをいくつか持っています: <事前> <コード> shutdown1 データの各「チャンク」は、間にいくつかのブランクと連続しています。このようなリストのリストにデータを変換したい: <事前> <コード> shutdown2 提案?私はRes...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有