2016-09-19 13 views
3

R、バージョン3.3.1を使用しています。私は次の列を持っています:数字またはアスタリスクと数字(正規表現)で始まる単語はありません

my_column <- 
c("1. SuvlasniÄŤki dio: 1/21. SuvlasniÄŤki dio: 1/2 ", "CRKVENAC ANDRIJA, GAREĹ NICA KBR. 42CRKVENAC ANDRIJA, GAREĹ NICA KBR. 42 ", 
"2. SuvlasniÄŤki dio: 1/22. SuvlasniÄŤki dio: 1/2 ", "CRKVENAC LJUBICA ROÄ. VERTUĹ , GAREĹ NICA KBR. 42CRKVENAC LJUBICA ROÄ. VERTUĹ , GAREĹ NICA KBR. 42 ", 
"*1. Vlasnički dio: 1/1*1. Vlasnički dio: 1/1 ", "*MUHVIĆ IVAN, ANTUNOV, GAREŠNICA, MATIJE GUPCA 3*MUHVIĆ IVAN, ANTUNOV, GAREŠNICA, MATIJE GUPCA 3 ", 
"2. SuvlasniÄŤki dio: 1/22. SuvlasniÄŤki dio: 1/2 ", "ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4 ", 
"3. SuvlasniÄŤki dio: 1/23. SuvlasniÄŤki dio: 1/2 ", "ANÄAL LIDIJA, GAREĹ NICA, MATIJE GUPCA KBR. 156ANÄAL LIDIJA, GAREĹ NICA, MATIJE GUPCA KBR. 156 " 
) 

文字列は、文字、数字、*番号または*文字で始まります。 numberと* numberで始まるすべての文字列を削除したいと思います。私は次のコードを試してみました:

しかし、文字ではなく文字で始まる文字列だけを返しますか?

答えて

2

を文字列の先頭(^)から、我々はゼロ以上*\\**が)数([0-9]and negate続い `要素を抽出するために一致します。

my_column[!grepl("^(\\**[0-9])", my_column)] 
#[1] "CRKVENAC ANDRIJA, GAREL NICA KBR. 42CRKVENAC ANDRIJA, GAREL NICA KBR. 42 "          
#[2] "CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42 "   
#[3] "*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3 "   
#[4] "ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4 " 
#[5] "ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156 " 

それともinvert=TRUEgrepを使用し、

grep("^(\\**[0-9])", my_column, invert=TRUE, value=TRUE) 
#[1] "CRKVENAC ANDRIJA, GAREL NICA KBR. 42CRKVENAC ANDRIJA, GAREL NICA KBR. 42 "          
#[2] "CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42 "   
#[3] "*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3 "   
#[4] "ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4 " 
#[5] "ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156 " 

注:OPのポストに基づいてBut it returns only strings that start with letter and not * letter words?

+0

ありがとうございます。あなたのソリューションは動作します。 *なぜ2回使用しましたか? – Mislav

+0

@Mislav '*'はメタキャラクタなので、 '\\ *'をエスケープする必要があり、2番目の '*'はメタキャラクタなので、0以上の '*' – akrun

4

これを使用してみてください:

x[!grepl("^\\*?\\d.*$", x)] 

[1] "CRKVENAC ANDRIJA, GAREL NICA KBR. 42CRKVENAC ANDRIJA, GAREL NICA KBR. 42 "          
[2] "CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42CRKVENAC LJUBICA ROÄ. VERTUL , GAREL NICA KBR. 42 "   
[3] "*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3*MUHVIĆ IVAN, ANTUNOV, GAREL NICA, MATIJE GUPCA 3 "   
[4] "ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4 " 
[5] "ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156ANÄAL LIDIJA, GAREL NICA, MATIJE GUPCA KBR. 156 " 

ここで使用されている正規表現は次のとおりです。

^\\*?\\d.*$ 

これは、アスタリスクで始まり、アスタリスクまたはで始まるいずれかでご入力ベクトル内のエントリと一致します数字が続きます(しかし、何も続きません)。この論理ベクトルは、のネゲートです。これらの文字列と一致させたくないためです。あなたがここに、この正規表現を探索することができます!

Regex101

+1

オペアンプのソリューションは、すでにこの '同じ(Xの[をしgrepl(「^(\\ D! x、grepl( "(?=^[^ \\ *] \\ D {2})(?=^\ D)"、x、perl = TRUE)])## [1] TRUE' – rawr

+0

@rawr質問のタイトルに行ってきました。これは本当に欲しいものではありません。 –

+0

'(\\ d | \\ * \\ d)'は '\\ *?\\ d'と同じで、2番目の方が便利な場合には早くなります –

関連する問題