簡體   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