在这种情况下,
(3 [97 98] 100 110 [116 117] 200)
我想选择这样的数字。
当数字词位于[ ]
时,只有[
后面的单词和数字词不在[ ]
中,而是全部在3 97 100 110 116 200
。
{{1}}
我怎么能做到这一点?
答案 0 :(得分:5)
您可以使用gsub
:
s <- "(3 [97 98] 100 110 [116 117] 200)"
gsub("\\[(\\d+).*?\\]|[()]", "\\1", s)
# [1] "3 97 100 110 116 200"
它如何运作?
gsub
中使用的正则表达式是
\\[(\\d+).*?\\]|[()]
它由两部分组成,通过逻辑或(|
)连接。
第一部分,
\\[(\\d+).*?\\]
匹配方括号(包括括号)之间的所有内容。正则表达式\\[
匹配[
,\\]
,匹配]
。此外,\\d+
表示一位或多位数。 .*?
匹配任意数量的任何字符。 ?
确保非贪婪匹配,即直到下一个]
。括号表示匹配组。这里,第一个匹配组是[
之后的第一个数字字符串。
第二部分,
[()]
匹配括号。
每个匹配都被\\1
替换,即第一个匹配组。因此,方括号之间的字符串将被这些括号内的第一个数字替换。括号被替换为空(空字符串),因为没有匹配的组。
答案 1 :(得分:0)
这可能是您正在寻找的。 p>
s <- "(3 [97 98] [116 117] 200)"
regmatches(s, gregexpr("[0-9]", s))
我完全不了解您的修改,但您只需要用更新的正则表达式替换"[0-9]"
。