我需要确定具有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
但是,我的代码找不到任何匹配项。你能帮我吗?
答案 0 :(得分:1)
在这里,这个简单的表达可能会覆盖:
^[0-9]{2}\.[3].+$
,它在[3]
之后有.
边界。如果没有开始和结束锚点,它可能会起作用:
[0-9]{2}\.[3].+
如有必要,我们可以增加或减少边界。
答案 1 :(得分:1)
您应该使用
grepl("^[0-9]{2}\\.3", Teacher$CourseNumber)
请参见regex graph:
详细信息:
^
-字符串的开头[0-9]{2}
-两位数字\\.
-一个点(请注意,正则表达式转义符是字面反斜杠,但是在字符串文字"..."
中,单个反斜杠用于形成字符串转义序列,因此,反斜杠必须为double以获得正则表达式转义所必需的文字反斜杠字符)3
-一个3
字符。 注意:如果您想在\Q
和\E
中使用模式内引用(在所有字符之间均按字面意义对待),则需要使用PCRE正则表达式,添加perl=TRUE
并使用
grepl("^[0-9]{2}\\Q.\\E3", Teacher$CourseNumber, perl=TRUE)
现在,该点被视为文字点,而不是匹配任何字符的.
元字符,而是一个换行符(在PCRE正则表达式中,.
默认不匹配换行符) )。