【问题标题】:Remove Pattern at Beginning of String but not at End在字符串开头但不在结尾删除模式
【发布时间】:2018-07-01 18:03:08
【问题描述】:

我有一个学校列表,但其中一些是排名的。我想删除学校的排名(在字符串的开头)。学校排名的时候是这样的:

(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

【问题讨论】:

  • 如果您想尝试正则表达式,请访问regex101.com

标签: r regex string data-cleaning


【解决方案1】:

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

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

这匹配一个领先的排名,在它之前和之后可能有空格,然后它匹配并捕获字符串的其余部分。然后它用余数替换字符串。

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

[1] "Trinity"

Demo

【讨论】:

  • 哇,感谢您的快速回复。希望我能真正理解这里的正则表达式代码,但它仍然有很大帮助。
【解决方案2】:

sub 的另一个选项是

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

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

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

【讨论】:

  • 那个未转义的括号对我来说太奇怪了,否则+1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2013-01-12
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多