簡體   English   中英

字符串末尾的正向后視和前視

[英]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 - 匹配重置運算符
  • (?<=\\+) - 緊跟在+符號之后的位置
  • [^+]+ - 除+之外的一個或多個字符
  • \\+ - 一個+
  • [^+]+ - 除+之外的一個或多個字符
  • $ - 字符串的結尾。

在線查看R 演示

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM