gsub或grep regex查找字符串但忽略HTML标记<>

时间:2016-07-19 15:46:14

标签: r grep gsub

我绝对不是正则表达式专家,而且一直困在这一点:

这就是我所拥有的:

a <- paste(c(LETTERS[1:20], "<br/>", LETTERS[21:26]), collapse ="")
[1] "ABCDEFGHIJKLMNOPQRST<br/>UVWXYZ"

我尝试查找一个或多个大写字母,并包含其他HTML标记,例如粗体<b>,仅对字母B起作用。

 gsub("B", "<b>B</b>", a)
 [1] "A<b>B</b>CDEFGHIJKLMNOPQRST<br/>UVWXYZ"

"AB"

b <- c("AB")
gsub(b, paste0("<b>", b, "</b>"), a)
[1] "<b>AB</b>CDEFGHIJKLMNOPQRST<br/>UVWXYZ"

但突出显示<br/>上的模式当然不适合这种方法。 (例如gsub("STU", "<b>STU</b>", a)) 所以我需要一个忽略<br/>标签的函数。我使用类似^(?!.*br)的内容启动了查询,但我无法正常工作。 所以我的预期输出将是:

b <- c("STU")
# function and expected output:
"ABCDEFGHIJKLMNOPQR<b>ST<br/>U</b>VWXYZ"

2 个答案:

答案 0 :(得分:2)

您可以使用function contextListener() { if(!document.handAddcontext){ document.handAddcontext = true document.addEventListener("contextmenu", function(e) { taskItemInContext = clickInsideElement(e, taskItemClassName); if (taskItemInContext) { e.preventDefault(); toggleMenuOn(); positionMenu(e); } else { taskItemInContext = null; toggleMenuOff(); } }); } }

在括号中捕获标记B.
gsub

答案 1 :(得分:0)

当你写:

"<b>A<br/>B</b><br/>C"

不应该吗?

 "<b>A</b><br/><b>B</b><br/><b>C<b/>"

你可以尝试:

require(magrittr)  # for the %>% notation


a <- paste(LETTERS[1:3],collapse = "<br/>") 
res <- strsplit(a, "<br/>") %>% unlist %>% ifelse(. %in% LETTERS, sprintf("<b>%s</b>", .), .) %>% paste0(., collapse = "<br/>")
stopifnot(res == "<b>A</b><br/><b>B</b><br/><b>C</b>")

a <- paste(LETTERS[1:5],collapse = "<br/>") 
res <- strsplit(a, "<br/>") %>% unlist %>% ifelse(. %in% LETTERS, sprintf("<b>%s</b>", .), .) %>% paste0(., collapse = "<br/>")
stopifnot(res == "<b>A</b><br/><b>B</b><br/><b>C</b><br/><b>D</b><br/><b>E</b>")

a <- "A<br/>B<br/>f<br/>C<br/>d"
res <- strsplit(a, "<br/>") %>% unlist %>% ifelse(. %in% LETTERS, sprintf("<b>%s</b>", .), .) %>% paste0(., collapse = "<br/>")
stopifnot(res == "<b>A</b><br/><b>B</b><br/>f<br/><b>C</b><br/>d")