R中课程编号的REGEX模式匹配

时间:2019-06-05 15:58:06

标签: r regex

我需要确定具有xx.3xxxxxx的匹配课程号。 这些是课程编号的一些示例。

26.3730004   
27.0210000    
26.3730009   
26.7114001   
23.9610071  
26.0A34430    
23.3670005    
26.0B05430    

我尝试了许多模式,我使用的一个示例是以下模式。没有任何匹配。

“ [[^ 0-9] {2} \ Q. \ E3 [^ 0-9] + $”

我尝试使用grep和grepl。我实际上需要代码来返回索引。

此代码显示了我尝试标记具有匹配项的行。

Teacher$virtual[
            which(
                 grepl("[^0-9]{2}\\Q.\\E3[^0-9]+$",Teacher$CourseNumber))]
               <- "1"

我需要从数据框中删除具有该模式的课程编号的任何行。 XX.3XXXXXX

但是,我的代码找不到任何匹配项。你能帮我吗?

2 个答案:

答案 0 :(得分:1)

在这里,这个简单的表达可能会覆盖:

^[0-9]{2}\.[3].+$

,它在[3]之后有.边界。如果没有开始和结束锚点,它可能会起作用:

[0-9]{2}\.[3].+

Demo

如有必要,我们可以增加或减少边界。

答案 1 :(得分:1)

您应该使用

grepl("^[0-9]{2}\\.3", Teacher$CourseNumber)

请参见regex graph

enter image description here

详细信息

  • ^-字符串的开头
  • [0-9]{2}-两位数字
  • \\.-一个点(请注意,正则表达式转义符是字面反斜杠,但是在字符串文字"..."中,单个反斜杠用于形成字符串转义序列,因此,反斜杠必须为double以获得正则表达式转义所必需的文字反斜杠字符)
  • 3-一个3字符。

注意:如果您想在\Q\E中使用模式内引用(在所有字符之间均按字面意义对待),则需要使用PCRE正则表达式,添加perl=TRUE并使用

grepl("^[0-9]{2}\\Q.\\E3", Teacher$CourseNumber, perl=TRUE)

现在,该点被视为文字点,而不是匹配任何字符的.元字符,而是一个换行符(在PCRE正则表达式中,.默认不匹配换行符) )。