如何提取包含名称和年份的所有括号?
#assumed data is tuple
>>>unpack(len(data)*h,data)
所需的输出如下所示:
select mdate, mentry, mexit,
(max(case when seqnum = 1 then total else 0 end) over (order by mdate) +
sum(case when seqnum > 1 then mentry - mexit else 0 end) over (order by mdate)
) as new_total
from (select d.*, row_number() over (order by mdate) as seqnum
from dash d
) d
我不想提取(2018)和(antonio)
答案 0 :(得分:5)
您可以将str_extract_all
包中的stringr
与此正则表达式一起使用:
stringr::str_extract_all(string,
"\\(\\w+([[:punct:]]{1}|[[:blank:]]{1})[[:digit:]]+\\)")
# [[1]]
# [1] "(antonio.2018)" "(giovanni,2018)" "(libero 2019)"
正则表达式的简短描述:
\\w
将匹配任何单词字符
+
意味着必须至少匹配一次
[[:punct:]]
将匹配任何标点符号
{1}
只会出现一次
(....|....)
表示一种模式,或者必须满足另一种模式
[[:blank:]]
表示必须出现空格
[[:digit:]]
表示必须出现任何数字
\\(
括号必须退出。
答案 1 :(得分:3)
@loki的答案很棒!您也可以尝试一下,希望对您有用:)
x<-regmatches(string, gregexpr("(?=\\().*?(?<=\\))", string, perl=T))[[1]]
>x
[1] "(antonio.2018)" "(antonio)" "(giovanni,2018)" "(2018)" "(libero 2019)"
#Extract every nth value.
>x[seq_along(x) %% 2 > 0]
[1] "(antonio.2018)" "(giovanni,2018)" "(libero 2019)"
注意:不确定完整的数据集(即结构是否始终为第n个格式。如果为(每个第2个值),则可以大规模使用。