![](/img/trans.png)
[英]Why does strsplit use positive lookahead and lookbehind assertion matches differently?
[英]Positive Lookbehind and Lookahead to the end of string
我的字符串模式如下所示: UNB+UNOC:3+4399945681577+_GLN_Company__+180101:0050+10870
我試圖在倒數第二個+
之后提取所有內容,即180101:0050+10870
。
到目前為止,我設法用這個表達式(?<=\\+)[^\\+]+(?=\\+[^\\+]*$)
解決了倒數第二個塊180101:0050
但未能包含最后一個塊包括最后一個+。 這是我的示例: regex101
該表達式適用於 R,稍后我仍然需要對字符進行轉義。 這種格式僅用於 Regex101 中的測試目的。
我們可以根據字符串末尾 ( $
) 出現的+
來捕獲組。
sub(".*\\+([^+]+\\+[^+]+$)", "\\1", str1)
#[1] "180101:0050+10870"
str1 <- "UNB+UNOC:3+4399945681577+_GLN_Company__+180101:0050+10870"
您可以使用
\+\K[^+]+\+[^+]*$
或者,如果您想將它與stringr::str_extract
一起使用:
(?<=\+)[^+]+\+[^+]*$
請參閱正則表達式演示。 細節:
\\+
- 一個+
字符\\K
- 匹配重置運算符(?<=\\+)
- 緊跟在+
符號之后的位置[^+]+
- 除+
之外的一個或多個字符\\+
- 一個+
[^+]+
- 除+
之外的一個或多個字符$
- 字符串的結尾。x <- "UNB+UNOC:3+4399945681577+_GLN_Company__+180101:0050+10870"
regmatches(x, regexpr("\\+\\K[^+]+\\+[^+]*$", x, perl=TRUE))
## => [1] "180101:0050+10870"
library(stringr)
str_extract(x, "(?<=\\+)[^+]+\\+[^+]*$")
## => [1] "180101:0050+10870"
在這種情況下你可以做的另一種方法:
library(stringr)
str_extract("UNB+UNOC:3+4399945681577+_GLN_Company__+180101:0050+10870", "\\d+:\\d+\\+\\d+")
#"180101:0050+10870"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.