[英]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.