2016-11-25 3 views
0

これは渦巻きコースからの質問です。メタキャラクタ "。"渦巻きセッションのRで

目標は、母音で始まり、母音で終わる位置データをフィルタリングして印刷することです。ここで

コードです:

start_end_vowel<- "^[AEIOU]{1}.+[aeiou]{1}$" #Q1 
    vowel_state_lgl <-grepl(start_end_vowel,state.name) #Q2 
    state.name[vowel_state_lgl] #Q3 

[1] "Alabama" "Alaska" "Arizona" "Idaho" "Indiana" "Iowa"  "Ohio"  "Oklahoma" 

私の質問はQ1で.の使用が何であるか、ですか?

私は.が任意の文字であることを知っています。上記の場合、母音で始まる位置を指定したいのですが、なぜ+[aeiou]{1}$には.が必要ですか?実際には、使用している場合、Rはエラーを報告します+[aeiou]{1}.$

この場合、.を使用する適切な方法は何ですか?ここで

+1

'"。* "'はコンポーネントです。任意の一連の文字に一致します。そして、* [aeiou] $ "'は、母音で終わる文字列に一致します。 [このサイト](http://www.regular-expressions.info/)はすばらしいリファレンスです。 – lmo

+0

'.'は正規表現のワイルドカードに相当します。これは何でも一致します。 '* +'のような複数の演算子は、直前に来た文字の「任意の数」と「複数のもの」に一致すると言っています。私はこのチートシートブックを自分自身を助けるためにマークしておく:https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ – Nate

答えて

0

は、あなたの正規表現の読み取り方法の内訳です:

^[AEIOU]{1}.+[aeiou]{1}$ 

^       Start of a line 
[AEIOU]     Match any single character inside the []. A single upper-case vowel 
     {1}    Match the preceding token exactly once 
      .    Match any character (depending on your RegEx engine and options this will behave with slight variation.) 
      +    Match the preceding token as many times as possible. "Any character any number of times" 
      [aeiou]{1} Match a single lower-case vowel. 
         $ Match the end of a line. 

それは以下のような読んでいましたので、[aeiou]{1}$.を必要としない、あなたの質問に答えるために:

あなたを意味
[aeiou]{1}.$ 

[aeiou]{1}  Match any lower-case vowel one time 
      .  Match any other character one time 
      $ Match end of line 

RegExは、大文字の母音で始まる行にのみ一致します。

RegExのアドバイスを提供する前に、私はいつもこれを言っています。私はRegExの忍者ではありません。おそらくこれを行うにはより良い方法があります。そうは言ってあなたは、大文字と小文字を区別しない母音で始まる行を一致させる必要がある場合は、代わりにこれを使用する:私は冗長{1}修飾子を削除

^[aeiouAEIOU].+[aeiouAEIOU]$

お知らせ。デフォルトでは1文字に一致する必要があります。

+0

ありがとう!それは非常に明示的な答えです! – leveygao

関連する問題