[英]Substring all letters in a string between two characters
通过在线查看,我无法快速找到解决方案。 我只需要抓住$
和the之间存在的子串.
在下面的字符串中:
a = "NBA_FINAL_ONCOURT$2016012523.XML"
我使用substr
和gregexpr
一些复杂组合阅读解决方案,但这并不一定能满足我的需求。
我想做的就是返回"2016012523"
。
您可以使用带有regmatches
/ regexpr
的PCRE正则表达式:
> a = "NBA_FINAL_ONCOURT$2016012523.XML"
> regmatches(a, regexpr("(?<=\\$)[^.]+", a, perl=TRUE))
[1] "2016012523"
正则表达式非常简单:
(?<=\\\\$)
- 在当前分析的位置之前必须有一个文字$
[^.]+
- 除了之外的一个或多个( +
)字符.
(a .
内部[...]
匹配文字.
)。 注意 :要求一个点,你需要附加一个(?=\\\\.)
前瞻: (?<=\\\\$)[^.]+(?=\\\\.)
如果你想使用TRE正则表达式(默认风格),你可以使用相同的模式,将lookbehind (?<=\\\\$)
更改为捕获组,a (...)
(但是,然后,访问该值,你需要使用regmatches
与regexec
:
> regmatches(a, regexec("\\$([^.]+)", a))[[1]][2] ## or "\\$([^.]+)\\." to require a dot
[1] "2016012523"
请注意,此处[^.]+
包含捕获括号,这些括号在正则表达式匹配对象中形成一个子组,您可以稍后访问该子组。
或者使用sub
来做,因为David评论过匹配整个字符串,捕获捕获组所需的内容,并替换为捕获的子文本的反向引用:
> sub(".*\\$([^.]+)\\..*", "\\1", a)
[1] "2016012523"
这里,
.*
- 匹配任何0+字符,尽可能多地匹配最后一次出现的子模式 \\\\$
- 一个文字$
(否则,它匹配字符串的结尾) ([^.]+)
- 第1组:除以外的一个或多个字符.
\\\\.
- 一个字面点 .*
- 字符串的其余部分。 这取决于你的字符串是动态的还是静态的。 如果它是静态的那么很简单,你可以直接替换那些文本,但如果它是动态的,那么你必须写一些东西。例如。
String a="NBA_FINAL_ONCOURT$2016012523.XML";
String []b=a.split("T");//spliting string into 2 parts
String k=b[1].replace("$","").replace(".XML","");//removing remaining text
If your value is dynamic then plz use :StringTokenizer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.