gpt4 book ai didi

r - 将字符串中的所有字母子字符串化在两个字符之间

转载 作者:行者123 更新时间:2023-12-01 12:22:39 27 4
gpt4 key购买 nike

我无法通过在线查找快速找到解决方案。我只需要在下面的字符串中获取 $. 之间存在的子字符串:

a = "NBA_FINAL_ONCOURT$2016012523.XML"

我阅读了使用 substrgregexpr 的一些复杂组合的解决方案,但不一定能满足我的需求。

我只想返回 "2016012523"

最佳答案

您可以将 PCRE 正则表达式与 regmatches 结合使用/regexpr :

> a = "NBA_FINAL_ONCOURT$2016012523.XML"
> regmatches(a, regexpr("(?<=\\$)[^.]+", a, perl=TRUE))
[1] "2016012523"

正则表达式非常简单:

  • (?<=\\$) - 必须有文字 $在当前分析位置之前
  • [^.]+ - 一个或多个 ( + ) 除 . 之外的字符(. 里面的 [...] 匹配文字 . )。

注意:要需要一个点,您需要附加一个 (?=\\.)前瞻:(?<=\\$)[^.]+(?=\\.)

如果你想使用 TRE 正则表达式(默认风格),你可以使用相同的模式与 lookbehind (?<=\\$)变成了捕获组,一个(...) (但是,要访问该值,您需要将 regmatchesregexec 一起使用:

> regmatches(a, regexec("\\$([^.]+)", a))[[1]][2]  ## or "\\$([^.]+)\\." to require a dot
[1] "2016012523"

注意这里是[^.]+包含在正则表达式匹配对象中形成子组的捕获括号,您可以稍后访问该子组。

或者用 sub 来做作为David commented匹配整个字符串,用捕获组捕获你需要的内容,并替换为捕获的子文本的反向引用:

> sub(".*\\$([^.]+)\\..*", "\\1", a)
[1] "2016012523"

这里,

  • .* - 匹配任何 0+ 个字符,尽可能多直到子模式的最后一次出现
  • \\$ - 文字 $ (否则,它匹配字符串的结尾)
  • ([^.]+) - 第 1 组:. 以外的一个或多个字符
  • \\. - 一个字面的点
  • .* - 字符串的其余部分。

关于r - 将字符串中的所有字母子字符串化在两个字符之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com