Word不以数字或星号和数字(正则表达式)开头

时间:2016-09-19 14:30:43

标签: regex r

我正在使用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开头的字符串。我尝试了以下代码:

my_column[grepl(pattern = "(?=^[^\\*]\\D{2})(?=^\\D)", x = my_column, perl = TRUE)]
# [1] "CRKVENAC ANDRIJA, GAREĹ NICA KBR. 42CRKVENAC ANDRIJA, GAREĹ NICA KBR. 42 "                                    
# [2] "CRKVENAC LJUBICA ROÄ. VERTUĹ , GAREĹ NICA KBR. 42CRKVENAC LJUBICA ROÄ. VERTUĹ , GAREĹ NICA KBR. 42 "          
# [3] "ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4ANÄAL-MLINARIĆ BRIGITA, BJELOVAR, V. LISINSKOG KBR. 4 "
# [4] "ANÄAL LIDIJA, GAREĹ NICA, MATIJE GUPCA KBR. 156ANÄAL LIDIJA, GAREĹ NICA, MATIJE GUPCA KBR. 156 "  

但它只返回以字母而不是*字母开头的字符串?

2 个答案:

答案 0 :(得分: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 :(得分: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 "  

或将grepinvert=TRUE

一起使用
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?