什么正则表达式可以检索(例如使用sup())第二个句点之前的字符。给定一个类似的字符向量:
我想把这个返回:
[1] "m_s.E1" "m_xs.P1"
v <- c("m_s.E1.m_x.R1PE1", "m_xs.P1.m_s.R2E12")
我想把这个返回:
[1] "m_s.E1" "m_xs.P1"
> sub( "(^[^.]+[.][^.]+)(.+$)", "\\1", v)
[1] "m_s.E1" "m_xs.P1"
"[ ]"
中的符号匹配除了句点之外的任何字符("字符类"),后面跟随的加号表示这些字符可以重复任意多次。因此,[.]
仅匹配第一个句点,第二个句点会终止匹配。括号允许你指定匹配字符的部分区域,并且有两个部分。第二部分是任意字符(句点符号)重复任意次直到字符串的结尾$
。"\\1"
只指定返回值为第一个部分匹配。
运算符^
在方括号内外有不同的含义。在方括号外面,它表示字符串的长度为零的开头。在方括号内部,在字符类规范的开始处,它表示否定操作。
这是“字符类”的一个很好的使用案例,可以在输入以下内容查找帮助页面以了解更多信息:
?regex
不是使用正则表达式,而是利用 qdap
包中的 beg2char
函数来处理:
library(qdap)
beg2char(v, ".", 2)
## [1] "m_s.E1" "m_xs.P1"
.+$
,但如果不在括号外面,整个字符串都会被返回。 - IRTFM