通过在线查看,我无法快速找到解决方案。我只需要抓住下面字符串中$
和.
之间存在的子字符串:
a = "NBA_FINAL_ONCOURT$2016012523.XML"
我使用substr
和gregexpr
的一些复杂组合阅读解决方案,但这并不一定能满足我的需求。
我想做的就是返回"2016012523"
。
答案 0 :(得分:5)
您可以使用regmatches
/ regexpr
> a = "NBA_FINAL_ONCOURT$2016012523.XML"
> regmatches(a, regexpr("(?<=\\$)[^.]+", a, perl=TRUE))
[1] "2016012523"
正则表达式非常简单:
(?<=\\$)
- 在当前分析的位置之前必须有文字$
[^.]+
- +
以外的一个或多个(.
)字符(.
内的[...]
与文字.
匹配)。 注意:要求使用点,您需要附加(?=\\.)
前瞻:(?<=\\$)[^.]+(?=\\.)
如果您想使用TRE正则表达式(默认风格),您可以使用相同的模式,将lookbehind (?<=\\$)
更改为捕获组(...)
(但是,然后,要访问该值,您需要将regmatches
与regexec
:
> regmatches(a, regexec("\\$([^.]+)", a))[[1]][2] ## or "\\$([^.]+)\\." to require a dot
[1] "2016012523"
请注意,此处[^.]+
包含捕获括号,这些括号在正则表达式匹配对象中形成一个子组,您可以稍后访问该子组。
或者使用sub
作为David commented来匹配整个字符串,捕获捕获组所需的内容,并替换为捕获的子文本的反向引用:
> sub(".*\\$([^.]+)\\..*", "\\1", a)
[1] "2016012523"
下面,
.*
- 匹配任何0+字符,尽可能多地匹配子模式的最后一次出现\\$
- 文字$
(否则,它匹配字符串的结尾)([^.]+)
- 第1组:.
\\.
- 一个文字点.*
- 字符串的其余部分。答案 1 :(得分:-1)
这取决于你的字符串是动态的还是静态的。 如果它是静态的,那么很简单,你可以直接替换那些文本,但如果它是动态的,那么你必须写一些东西。例如。
requestAnimationFrame()