例如要找出 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
我知道可以用|表达或者这个逻辑,但是并且这种逻辑,如何表达?
试试
<br />
grep('^[^A-D]*o',a)<br />
</p>不对,如果是并且,这个逻辑,两个条件的位置可以交换。
> 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是并且的关系。
试试
<br />
a[grep('^[^ao][^o]*$',a)]<br />
</p>不包含字母o,不可以这样写grep('[^o]',state.name),请问,应当如何表达?
a[grep('^[^o]*$',a)]
</p>都对了,我没有想通,一个一个来。
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}不起作用,请问版主,是这样吗?