在PowerBI查询编辑器中使用R脚本在描述列中查找六位数字字符串,并将其作为新列添加到表中。它的作用是EXCEPT,其中数字字符串前面有一个“_”(下划线字符)
# 'dataset' holds the input data for this script ##
library(stringr)
# assign regex to variable #
pattern <- "(?:^|\\D)(\\d{6})(?!\\d)"
# define function to use pattern ##
isNewSiteNum = function(x) substr(str_extract(x,pattern),1,6)
# output statement - within adds new column to dataset ##
output <- within(dataset,{NewSiteNum=isNewSiteNum(dataset$LineItemComment)})
数字字符串可以位于描述文本的开头,结尾或中间。当数字字符串前面有下划线(例如_123456)时,正则表达式返回_12345而不是123456.不确定如何告诉它跳过下划线但仍然抓住六位数(并且不打破没有前导下划线的情况)目前有效。)
regex101.com将完整匹配显示为'_123456',将group.1显示为'123456',但我的结果列为'_12345'对于具有前导空格的情况,完全匹配为'123456',但我的结果列是正确的。我似乎错过了一些东西,因为完全匹配得到7个字符,而欲望组1有6个。
答案 0 :(得分:0)
问题在于str_extract我无法工作。但是,通过使用str_match并选择组我得到了我正在寻找的东西。
# 'dataset' holds input data
library(stringr)
pattern<-"(?:^|\\D)(\\d{6})(?!\\d)"
SiteNum = function(x) str_match(x, pattern)[,2]
output<-within(dataset,{R_SiteNum2=SiteNum(dataset$ReqComments)})
这不会拾取非数字的初始字符。