在R中有没有办法根据模式的开头和结尾提取数据,而不是中间数据?
即。如果以下是在一个单元格中
(1) Number = '1111111111, 0000000000' Text =....
(2) Number = '0000000000' Text =....
它会导致:
(1) 1111111111, 0000000000
(2) 0000000000
我试过了:
x1<-str_match(x,"(?<=Number'\\s\\=\\s\\')(\\d|\\s|\\,)\\d\\'")
但这不起作用。
答案 0 :(得分:0)
我们可以尝试str_extract_all
library(stringr)
sapply(str_extract_all(x, "[0-9]+"), toString)
#[1] "1111111111, 0000000000" "0000000000"
答案 1 :(得分:0)
您可以使用PCRE正则表达式从输入文本中提取Number='
后的数字:
(?:Number\s*=\s*'|\G(?!\A)\s*,\s*)\K\d+
请参阅regex demo。
模式详情:
(?:Number\s*=\s*'|\G(?!\A)\s*,\s*)
- 两种选择中的任何一种:
Number\s*=\s*'
- Number
以及包含0 +空格的=
|
- 或\G(?!\A)\s*,\s*
- 上一次成功匹配(\G(?!\A)
)的结束以及用0 +空格(\s*
)括起来的逗号\K
- 省略目前为止匹配的文字\d+
- 1+位数(作为匹配项返回)请参阅R demo:
> x <- c("(1) Number = '1111111111, 0000000000' Text =....", "(2) Number = '0000000000' Text =....")
> regmatches(x, gregexpr("(?:Number\\s*=\\s*'|\\G(?!\\A)\\s*,\\s*)\\K\\d+", x, perl=TRUE))
[[1]]
[1] "1111111111" "0000000000"
[[2]]
[1] "0000000000"