提取带有正负号的数字

时间:2019-03-28 17:43:03

标签: r regex

在提取带有+/-符号的数字时遇到麻烦。

我的示例字符串就是这样

x <- c("alexander c/d=(+5/-1)","maximus a/b=(-4/1)", "thor e/d=(+3/-2)")

我尝试提取正斜杠/前后带有其符号的数字。

所以我尝试了

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

给出

"alexander c/d=(+5/-1)" "-4"                    "thor e/d=(+3/-2)"

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

OTH,预期输出

before_slash

+5 -4 +3 

after_slash

-1 1 -2

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

Before slash

regmatches(x, regexpr("[-+]?\\d+(?=/)", x, perl=TRUE))
str_extract(x, "[-+]?\\d+(?=/)")

详细信息

  • [-+]?-可选的-+
  • \d+-1个或更多数字
  • (?=/)-当前位置的右边必须有一个斜杠

After slash

regmatches(x, regexpr("/\\K[-+]?\\d+", x, perl=TRUE))
str_extract(x, "(?<=/)[-+]?\\d+")

请参见R demo

详细信息

  • /-斜杠
  • \K-匹配重置运算符会丢弃到目前为止已匹配的所有文本
  • [-+]?-可选的-+
  • \d+-1个或更多数字