在这种情况下,如何使用正则表达式查找特定模式?
(3 [97 98] 100 110 [116 117] 200)
我想选择这样的数字的话。
当数字字词在[ ]
时,那么只有在[
之后的字词和数字字词不在[ ]
那么它们全部是。
3 97 100 110 116 200
我怎样才能让这个?
在这种情况下,如何使用正则表达式查找特定模式?
(3 [97 98] 100 110 [116 117] 200)
我想选择这样的数字的话。
当数字字词在[ ]
时,那么只有在[
之后的字词和数字字词不在[ ]
那么它们全部是。
3 97 100 110 116 200
我怎样才能让这个?
您可以使用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
,即第一匹配组。因此,方括号之间的字符串被这些括号内的第一个数字取代。由于没有匹配的组,所以括号被替换为空(空字符串)。
这可能是你要找的。
s <- "(3 [97 98] [116 117] 200)"
regmatches(s, gregexpr("[0-9]", s))
我不明白你究竟编辑,但你只需要更新的正则表达式替换"[0-9]"
。
非常感谢。你是个天才!!! – user2427306
@Sven Hohenstein很好地使用正则表达式,但我可以请你翻译它并解释gsub表达式中正在做什么? –
@PauloCardoso我添加了一个解释。 –