【问题标题】:Replace some text after a string with Regex and Gsub in R用R中的Regex和Gsub替换字符串后的一些文本
【发布时间】:2017-06-27 23:44:56
【问题描述】:

这是一个简单的问题,但我不擅长正则表达式。 (我尝试了很多表达式都没有成功)

我想替换模式后的所有文本(什么都不替换)。

我的模式是这样的:

/canais/*/

我的数据是:

/canais/b3/conheca-o-pai-dos-indices-da-b3/
/canais/cpbs/cvm-abre-audiencia-publica-de-instruc
/canais/stocche-forbes/dividendo-controverso/

想要的结果是:

/canais/b3/
/canais/cpbs/
/canais/stocche-forbes/

我怎样才能用 gsub 做到这一点?

谢谢

【问题讨论】:

  • dirname(txt) 也许?

标签: r regex gsub


【解决方案1】:

您可以使用以下sub

x <- c("/canais/b3/conheca-o-pai-dos-indices-da-b3/","/canais/cpbs/cvm-abre-audiencia-publica-de-instruc","/canais/stocche-forbes/dividendo-controverso/")
sub("^(/canais/[^/]+/).*", "\\1", x)

online R demo

详情

  • ^ - 字符串开头
  • (/canais/[^/]+/) - 第 1 组(稍后称为 \1)捕获:
    • /canais/ - 一个子字符串 /canais/
    • [^/]+ - 除/ 以外的1 个或多个字符
    • / - 斜线
  • .* - 任何 0+ 个字符,直到字符串结尾。

【讨论】:

  • 非常感谢维克托。工作正常!感谢您的解释,在其他情况下会有所帮助。我在数据中有一些行有/category/canais/name/,然后我改变了一点:gsub(".*(/canais/[^/]+/).*", "\\1", x)
  • @DiegoGaona:我会使用lazy .*? at the beginning
  • .*.*? 之间有什么区别?使用第一个选项,也可以在我的测试中使用,但在某些情况下可能会出错......我不知道。
  • .*? 匹配尽可能少的字符,直到 first 出现后续子模式。 .* 尽可能多地匹配,直到后续子模式的最后次出现。
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多