grepl 与正则表达式
grepl with regex
我在将 grepl 与正则表达式结合使用时遇到困难。
这是一个小例子:
我有一个字符向量:
text <- c(
"D_Purpose__Repairs" ,
"Age" ,
"F_Job"
)
我想select以D_或F_开头的单词。所以我写:
grepl("\>D_.+ | \>F_.+", text)
grepl("\D_.+ | \F_.+", text)
grepl("\^D_.+ | \^F_.+", text)
然而这个returns:
[1] FALSE FALSE FALSE
你能帮我理解我做错了什么以及我应该如何更正我的代码吗?
我们将不胜感激您的建议。
您不需要(也不得)使用反斜杠转义插入符号,并且您不能在正则表达式中的 | 周围放置额外的空格。这如您所愿:
> grepl("^D_.+|^F_.+", text)
[1] TRUE FALSE TRUE
对您的模式的一些评论:
\>D_.+ | \>F_.+
- 此处,\>
匹配单词位置的结尾,而此处的实际位置是单词的 start (因此,您可能想尝试使用 \<'). Also, the spaces around
|are meaningful, you should not add them unless you use a
perl=TRUEwith a
(?x)` 修饰符。
\D_.+ | \F_.+
是格式错误的模式,因为 \F
是未知的正则表达式转义。 \D
匹配除数字以外的任何字符,这显然是您没有想到的。
\^D_.+ | \^F_.+
是最接近的,但又有多余的空格,转义的 ^
匹配文字插入符号。如果您不转义插入符号,它们将匹配字符串位置的开头。
现在,这里最有效的模式是
grepl("^[DF]_.+", text)
含义:
^
- 字符串锚点的开始
[DF]
- D
或 F
个字母
_
- 文字下划线
.+
- 任何 1+ 个字符,直到字符串末尾为止。
我在将 grepl 与正则表达式结合使用时遇到困难。
这是一个小例子:
我有一个字符向量:
text <- c(
"D_Purpose__Repairs" ,
"Age" ,
"F_Job"
)
我想select以D_或F_开头的单词。所以我写:
grepl("\>D_.+ | \>F_.+", text)
grepl("\D_.+ | \F_.+", text)
grepl("\^D_.+ | \^F_.+", text)
然而这个returns:
[1] FALSE FALSE FALSE
你能帮我理解我做错了什么以及我应该如何更正我的代码吗?
我们将不胜感激您的建议。
您不需要(也不得)使用反斜杠转义插入符号,并且您不能在正则表达式中的 | 周围放置额外的空格。这如您所愿:
> grepl("^D_.+|^F_.+", text)
[1] TRUE FALSE TRUE
对您的模式的一些评论:
\>D_.+ | \>F_.+
- 此处,\>
匹配单词位置的结尾,而此处的实际位置是单词的 start (因此,您可能想尝试使用\<'). Also, the spaces around
|are meaningful, you should not add them unless you use a
perl=TRUEwith a
(?x)` 修饰符。\D_.+ | \F_.+
是格式错误的模式,因为\F
是未知的正则表达式转义。\D
匹配除数字以外的任何字符,这显然是您没有想到的。\^D_.+ | \^F_.+
是最接近的,但又有多余的空格,转义的^
匹配文字插入符号。如果您不转义插入符号,它们将匹配字符串位置的开头。
现在,这里最有效的模式是
grepl("^[DF]_.+", text)
含义:
^
- 字符串锚点的开始[DF]
-D
或F
个字母_
- 文字下划线.+
- 任何 1+ 个字符,直到字符串末尾为止。