【问题标题】:Regex returns digit string with leading "_"正则表达式返回带有前导“_”的数字字符串
【发布时间】: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 函数中工作的模式

标签: r regex powerbi


【解决方案1】:

问题出在我无法开始工作的 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)})

这不会选择非数字的初始字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2016-11-29
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多