如何使用正则表达式查找特定模式?

时间:2014-03-03 08:55:52

标签: regex r

在这种情况下,

(3 [97 98] 100 110 [116 117] 200)

我想选择这样的数字。

当数字词位于[ ]时,只有[后面的单词和数字词不在[ ]中,而是全部在3 97 100 110 116 200

{{1}}

我怎么能做到这一点?

2 个答案:

答案 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)

这可能是您正在寻找的。

s <- "(3 [97 98] [116 117] 200)"
regmatches(s, gregexpr("[0-9]", s))

我完全不了解您的修改,但您只需要用更新的正则表达式替换"[0-9]"