在字符串的开头删除模式但不在结束时删除

时间:2018-01-23 01:37:08

标签: r regex string data-cleaning

我有一份学校名单,但其中一些是排名。我想删除学校的排名(在字符串的开头)。当学校排名时,它看起来像这样:

(3) Trinity

但是,有些学校的名字末尾有括号,如下:

Concordia (Minn.)

所以我不想删除括号,如果它在字符串的末尾。

我不太清楚如何做到这一点,但我假设我需要正则表达式。

获取我的数据:

library(dplyr)
library(rvest)
library(purrr)

page_num <- seq(4, 16, by = 1) %>%
  paste("/", sep = "") %>%
  {page_num[-10]}

site <- paste("http://www.uscho.com/scoreboard/division-iii 
               men/20172018/list-", page_num, sep = "")

get_opponent <- function(x) {

  read_html(site[x]) %>%
    html_nodes("td:nth-child(2)") %>%
    html_text()

}

opponents <- map(seq(1, length(page_num)), get_opponent) %>%
  unlist() %>%
  tibble()

opponents

2 个答案:

答案 0 :(得分:3)

我们可以在这里使用sub,使用以下模式^

^\s*\(\d+\)\s*(.*)

这匹配前导排名,前后可能有空格,然后匹配并捕获字符串的剩余部分。然后用剩余部分替换字符串。

x <- "(3) Trinity"
result <- sub("^\\s*\\(\\d+\\)\\s*(.*)", "\\1", x)
result

[1] "Trinity"

Demo

答案 1 :(得分:3)

sub的另一个选项是

x <- c("(3) Trinity", "Concordia (Minn.)")
sub("^\\(.*\\)", "", x)

#[1] " Trinity"          "Concordia (Minn.)"

替换字符串开头圆括号内的所有内容。

相关问题