正则表达式返回带有前导“_”的数字字符串

时间:2018-01-30 03:49:09

标签: r regex powerbi

在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个。

1 个答案:

答案 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)})

这不会拾取非数字的初始字符。