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

标签 regex r

在这种情况下,

(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/

相关文章:

java - 转义 Java RegEx 元字符

Python:以字节为单位的正则表达式和字符串长度

c++ - 使用正则表达式匹配函数定义

arrays - 如何在 R 中提取 1x1 数组切片作为矩阵?

r - 无论如何,有没有办法一起使用 dplyr 的滞后和超前函数

r - 以不同的单位扩展时间序列

ruby-on-rails - Ruby .scan 方法使用正则表达式返回空

r - dplyr::left_join 为新连接的列生成 NA 值

r - 在 Shiny 的应用程序中绘制谷歌地图

.net - 如何使用 C# 正则表达式匹配任意字符串中的最后一个字符?