【发布时间】:2011-02-27 11:58:34
【问题描述】:
我在 R 问题中可能是一个非常愚蠢的grep。道歉,因为这看起来应该很容易 - 我显然只是错过了一些东西。
我有一个字符串向量,我们称之为alice。部分alice 打印在下面:
T.8EFF.SP.OT1.D5.VSVOVA#4
T.8EFF.SP.OT1.D6.LISOVA#1
T.8EFF.SP.OT1.D6.LISOVA#2
T.8EFF.SP.OT1.D6.LISOVA#3
T.8EFF.SP.OT1.D6.VSVOVA#4
T.8EFF.SP.OT1.D8.VSVOVA#3
T.8EFF.SP.OT1.D8.VSVOVA#4
T.8MEM.SP#1
T.8MEM.SP#3
T.8MEM.SP.OT1.D106.VSVOVA#2
T.8MEM.SP.OT1.D45.LISOVA#1
T.8MEM.SP.OT1.D45.LISOVA#3
我希望 grep 给我出现在其中一些字符串中的 D 之后的数字,条件是包含“LIS”的字符串和一个空字符串或其他内容。
我希望 grep 会返回一个捕获组的值而不是整个字符串。这是我的 R 风格的正则表达式:
pattern <- (?<=\\.D)([0-9]+)(?=.LIS)
没什么太复杂的。但为了得到我想要的,而不是仅仅使用grep(pattern, alice, value = TRUE, perl = TRUE),我正在做以下事情,这似乎很糟糕:
reg.out <- regexpr(
"(?<=\\.D)[0-9]+(?=.LIS)",
alice,
perl=TRUE
)
substr(alice,reg.out,reg.out + attr(reg.out,"match.length")-1)
现在看起来它看起来并不太难看,但是为了让这个完全微不足道的事情发挥作用而花费的大量精力一直令人尴尬。任何人有任何关于如何正确处理这个问题的指示吗?
将我指向一个解释我使用$、@ 和attr 访问的任何内容之间的区别的网页的奖励标记。
【问题讨论】:
-
看起来这个问题已经被问过了,并得到了回答。为重复道歉! stackoverflow.com/questions/2192316/…