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