• R语言
  • 表示否定含义(正则表达式)

例如要找出 A~D 开头的州名:

data(state)

index <- grep("^[A-D]", state.name)

state.name[index]

请问,我要表达,找出,所有不是 A~D 开头的州名,如何做呢?

<br />
> index <- grep("^[A-D]", state.name)<br />
> state.name[-index] -> b1<br />
> index <- grep("^[^A-D]", state.name)<br />
> state.name[index] -> b2<br />
</p>

"^[^A-D]"这个模式里面,第一个^表示否定,还是第二个^表示否定?

如果,我想获得匹配成功字符串的位置呢?

第一个表示起始,第二个表示否定。

字符串的位置可以用gregexpr

如何表达并且这个逻辑?

1.开头不是A-D

2.含字母o

我知道可以用|表达或者这个逻辑,但是并且这种逻辑,如何表达?

不对,如果是并且,这个逻辑,两个条件的位置可以交换。

> grep('^[^A-D]*o',state.name)

[1] 9 10 12 13 15 18 23 25 26 31 32 33 34 35 36 37 39 40 41 45 47 49 50

> grep('o*^[^A-D]',state.name)

[1] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

交换位置后,得到的结果不同。

回复 第8楼 的 波波头一头:呵呵。好玩。

会搞就帮忙搞一下,我没有想通。

如果是这两个条件都要满足:

1.不能以A开头

2.不能含有字母o

请问,如何表达?1,2是并且的关系。

不包含字母o,不可以这样写grep('[^o]',state.name),请问,应当如何表达?

都对了,我没有想通,一个一个来。

1.不是以A-D开头的。

grep("^[^A-D]", state.name),这个翻了书,懂了,开头的,开头的字符串不含A-D。

2.grep('^[^A-D]*o',state.name),查了*的含义,在它前面的条件,不发生或者发生

如果不发生,演变成grep('o',state.name),包含字母o的都匹配

如果发生,就是一个不是A-D的字母开头,加上o,也满足条件。

3.grep("^[^Ao][^o]*$", state.name)

测试通过,但是没有想通,请 波波头一头 点拨一下?

为何$也出现了,匹配字符串结尾?

4.如果我要表达,匹配字母o出现两次呢?两次或两次以上都选出?

grep("^[^Ao][^o]*$", state.name)

我的做法是,开头字符不是A和o,然后后面直到结尾的字符(如果有的话)都不是o

两次o应该可以用a[grep('o.*o',a)]吧

还有连个问题:先请看

> index=grep('[o{2}]',state.name)

> state.name[index]

[1] "Arizona" "California" "Colorado" "Connecticut" "Florida" "Georgia" "Idaho" "Illinois"

[9] "Iowa" "Louisiana" "Minnesota" "Missouri" "Montana" "New Mexico" "New York" "North Carolina"

[17] "North Dakota" "Ohio" "Oklahoma" "Oregon" "Rhode Island" "South Carolina" "South Dakota" "Vermont"

[25] "Washington" "Wisconsin" "Wyoming"

> index=grep('[{2}o]',state.name)

> state.name[index]

[1] "Arizona" "California" "Colorado" "Connecticut" "Florida" "Georgia" "Idaho" "Illinois"

[9] "Iowa" "Louisiana" "Minnesota" "Missouri" "Montana" "New Mexico" "New York" "North Carolina"

[17] "North Dakota" "Ohio" "Oklahoma" "Oregon" "Rhode Island" "South Carolina" "South Dakota" "Vermont"

[25] "Washington" "Wisconsin" "Wyoming"

> index=grep('{2}o',state.name)

> state.name[index]

[1] "Arizona" "California" "Colorado" "Connecticut" "Florida" "Georgia" "Idaho" "Illinois"

[9] "Iowa" "Louisiana" "Minnesota" "Missouri" "Montana" "New Mexico" "New York" "North Carolina"

[17] "North Dakota" "Ohio" "Oklahoma" "Oregon" "Rhode Island" "South Carolina" "South Dakota" "Vermont"

[25] "Washington" "Wisconsin" "Wyoming"

> index=grep('o{2}',state.name)

> state.name[index]

character(0)

1.手册上说

http://stat.ethz.ch/R-manual/R-patched/library/base/html/regex.html

{n} The preceding item is matched exactly n times.

我使用后,发现{n}不起作用,无论放在o的前面还是后面?

2.[]括号有何具体含义,为何

index=grep('o{2}',state.name)没有结果

index=grep('[o{2}]',state.name)有结果?

[o{2}] 有o就匹配

o{2} 匹配连续两个o

preceding 是‘前’的意思

如果有个匹配模式 [{2}o],里面的o是字母 欧,请问这个如何理解?[] 表示匹配这个[]里面出现的任意字符。

我的理解就是[o],因为{2}这样的表达式通常是放在某个字符的后面,现在,我这个{2}的前面没有需要匹配的字符,等于{2}不起作用,请问版主,是这样吗?