Regex 在文本中使用R表示正则表达式IP地址
我试图解析一个数据帧,该数据帧的每一行都有文本,并且在该文本中有我想要隔离的IP地址。然而,我仍然在学习整数、整数和句点。下面是我正在使用的示例Regex 在文本中使用R表示正则表达式IP地址,regex,r,gsub,Regex,R,Gsub,我试图解析一个数据帧,该数据帧的每一行都有文本,并且在该文本中有我想要隔离的IP地址。然而,我仍然在学习整数、整数和句点。下面是我正在使用的示例 z <- data.frame( x = c('112.68.196.98 5.32', '192.41.196.888', '..','5.32 88')) gsub("^\\.+|\\.[^.]*$", "", z$x, perl=TRUE) z我认为这应该有效: re <- regexpr( "(?(?=
z <- data.frame( x = c('112.68.196.98 5.32', '192.41.196.888', '..','5.32 88'))
gsub("^\\.+|\\.[^.]*$", "", z$x, perl=TRUE)
z我认为这应该有效:
re <- regexpr(
"(?(?=.*?(\\d+\\.\\d+\\.\\d+\\.\\d+).*?)(\\1|))",
z$x, perl = TRUE)
regmatches(z$x, re)
#[1] "112.68.196.98" "192.41.196.888" "" ""
由于对gregexpr
输入调用regmatches
将返回一个列表,因此需要一些额外的处理:
res2 <- sapply(regmatches(z2$x, re2), function(x) {
gsub(
"^\\s+|\\s+$", "",
gsub("\\s+", " ", paste0(x, collapse = " "))
)
}
如果您确实想将每个结果分解为它自己的字符串,那么表达式要简单一些(与sapply(…)
):
数据:
z2 <- data.frame(
x = c('112.68.196.98 5.32 192.41.196.888',
'192.41.196.888',
'..', '5.32 88 112.68.196.98'),
stringsAsFactors = FALSE
)
z2可能重复的R使用了稍微不同的语法。不是复制品,只是非常相似。谢谢你。这很有效。还有一个问题,如果我在同一个单元格中有多个IP,我将如何修改它以捕获一个或多个IP。例如:z应该将多个IP拆分为它们自己的字符串,还是保持组合(例如,用空格分隔)?出于我的项目目的,我将它们合并为一个单元格/元素(用空格分隔),稍后我会将它们拆分。我希望他们保留相关的索引。谢谢
res2 <- sapply(regmatches(z2$x, re2), function(x) {
gsub(
"^\\s+|\\s+$", "",
gsub("\\s+", " ", paste0(x, collapse = " "))
)
}
res2
#[1] "112.68.196.98 192.41.196.888" "192.41.196.888"
# "" "112.68.196.98"
lapply(regmatches(z2$x, re2), function(x) {
Filter(function(y) y != "", x)
})
#[[1]]
#[1] "112.68.196.98" "192.41.196.888"
#[[2]]
#[1] "192.41.196.888"
#[[3]]
#character(0)
#[[4]]
#[1] "112.68.196.98"
z2 <- data.frame(
x = c('112.68.196.98 5.32 192.41.196.888',
'192.41.196.888',
'..', '5.32 88 112.68.196.98'),
stringsAsFactors = FALSE
)