元字符“。”在R上旋转会话

时间:2016-11-25 12:01:53

标签: r regex grepl

这是一个旋转课程的问题:

目标是使用元音过滤和打印位置数据的开始和结束。

以下是代码:

    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}$不需要.?事实上,如果使用+[aeiou]{1}.$

,则R报告错误

那么在这种情况下使用.的适当方法是什么?

1 个答案:

答案 0 :(得分:0)

以下是您的RegEx如何阅读的细分:

^[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忍者;可能有更好的方法来做到这一点。话虽如此,如果您需要匹配以不区分大小写的元音开头的行,请改用:

^[aeiouAEIOU].+[aeiouAEIOU]$

请注意,我删除了多余的{1}限定符。默认情况下它应匹配一个字符。