在这种情况下,
(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
,即第一个匹配组。因此,方括号之间的字符串将替换为这些括号内的第一个数字。括号被替换为空字符串(空字符串),因为没有匹配的组。
关于regex - 如何使用正则表达式查找特定模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142326/