首页 > 解决方案 > 在正斜杠之前和之后提取数字之前/

问题描述

我无法在之前和之后提取字符串/

x <- c("maximusa/b=5/1","maximusa/b=-4/1","maximusa/b=3/-2")

before_slash=sub(".*=(\\d+).*","\\1", x, perl = TRUE)

"5"               "maximusa/b=-4/1" "3"

然后

after_slash=sub("^.*\\/(d+)","\\1", x, perl = TRUE)

"maximusa/b=5/1"  "maximusa/b=-4/1" "maximusa/b=3/-2"

OTH,预期输出

斜线前 5 -4 3

斜线后 1 1 -2

我怎样才能得到预期的输出?

谢谢你的答案,

我想再添加一个条件来提取字符串,假设我们有这样的字符串。与 OP 一样,我们如何使用+符号提取并忽略括号?@mob 的当前解决方案给出了

  x <- c("maximusa/b=(5/+1)","maximusa/b=(-4/1)","maximusa/b=(+3/-2)")

after_slash=sub("^.*/(\\d+)","\\1", x, perl = TRUE)
> after_slash
[1] "maximusa/b=(5/+1)"  "1)"                 "maximusa/b=(+3/-2)"

 before_slash=sub(".*=(-?\\d+).*","\\1", x, perl = TRUE)

  > before_slash
[1] "maximusa/b=(5/+1)"  "maximusa/b=(-4/1)"  "maximusa/b=(+3/-2)"

我尝试了一些,但没有运气!

标签: rregexperl

解决方案


一个问题是

after_slash=sub("^.*\\/(d+)","\\1", x, perl = TRUE)

应该

after_slash=sub("^.*/(\\d+)","\\1", x, perl = TRUE)

要捕获负整数,您还需要使用

before_slash=sub(".*=(-?\\d+).*","\\1", x, perl = TRUE)
after_slash=sub("^.*/(-?\\d+)","\\1", x, perl = TRUE)

标记的-?意思是“-字符,0 或 1 次”


推荐阅读