【发布时间】:2018-01-30 03:49:09
【问题描述】:
在 PowerBI 查询编辑器中使用 R 脚本在描述列中查找六位数字字符串并将其作为新列添加到表中。它的工作原理是数字字符串前面有一个“_”(下划线字符)
# '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 个字符。
【问题讨论】:
-
如果你只使用
\\d{6}作为你的模式,你会怎么做?我不能完全理解双方的其他团队所取得的成就。 -
您能否举一个带有 _ 的整行以及另外两行带有或不带有 _ 的示例,那么可能有人会给您一个有效的正则表达式代码。
-
将 R 正则表达式字符串输入 RStudio 控制台我得到以下信息: > writeLines("(?:^|\\D)(\\d{6})(?!\\d) ") 生成字符串 (?:^|\D)(\d{6})(?!\d) 这个输出看起来像在 VBA 函数中工作的模式