r-正向向后看和向前看到字符串的末尾

  • 本文关键字:字符串 向前看 r regex
  • 更新时间 :
  • 英文 :


我的字符串模式如下所示: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:一起使用

(?<=+)[^+]++[^+]*$

请参阅regex演示。详细信息:

  • +-+字符
  • 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"

最新更新