繁体   English   中英

子串中两个字符之间的字符串中的所有字母

[英]Substring all letters in a string between two characters

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

a = "NBA_FINAL_ONCOURT$2016012523.XML"

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

我想做的就是返回"2016012523"

您可以使用带有regmatches / regexpr的PCRE正则表达式:

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

正则表达式非常简单:

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

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

如果你想使用TRE正则表达式(默认风格),你可以使用相同的模式,将lookbehind (?<=\\\\$)更改为捕获组,a (...) (但是,然后,访问该值,你需要使用regmatchesregexec

> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM