【发布时间】:2022-01-03 10:09:39
【问题描述】:
我在 Power BI 中有包含 mac 地址的脏数据,并且今天学习了 R,因此我可以使用正则表达式将它们全部提取出来。我可以让一切正常,但它只返回第一个 mac 地址。如果数据包含多个(他们都这样做),则不会返回。
我想将所有 mac 地址作为列表返回到一个新列中,以便在 Power 查询中我可以将它们提取到新行中。
这是我在 Power Query 编辑器中的 Power Query 代码表单。
# 'dataset' holds the input data for this script
# Variables
pattern <- "([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})|([0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4})"
# Functions
getMacs <- function(x) {paste(unlist(regmatches(x, gregexpr(pattern, x))))}
# Return
output <- within(dataset,{MACs1=getMacs(dataset$NICs)})
这是 NIC 列的一行中的示例值。
: -kdnic-[00000000] Microsoft Kernel Debug Network Adapter
11:22:33:44:55:66 : 10.0.0.0; Realtek Gaming 2.5GbE Family Controller
22:33:44:55:66:77 : -Netwtw08-[00000002] Intel(R) Wi-Fi 6 AX200 160MHz
33:44:55:66:77:88 : -vwifimp-[00000003] Microsoft Wi-Fi Direct Virtual Adapter
44:55:66:77:88:99 : -vwifimp-[00000004] Microsoft Wi-Fi Direct Virtual Adapter
: -BthPan-[00000005] Bluetooth Device (Personal Area Network)
: -RasSstp-[00000006] WAN Miniport (SSTP)
: -RasAgileVpn-[00000007] WAN Miniport (IKEv2)
: -Rasl2tp-[00000008] WAN Miniport (L2TP)
: -PptpMiniport-[00000009] WAN Miniport (PPTP)
: -RasPppoe-[00000010] WAN Miniport (PPPOE)
55:66:77:88:99:00 : -NdisWan-[00000011] WAN Miniport (IP)
66:77:88:99:00:11 : -NdisWan-[00000012] WAN Miniport (IPv6)
77:88:99:00:11:22 : -NdisWan-[00000013] WAN Miniport (Network Monitor)
88:99:00:11:22:22 : -VPPP-[00000014] Virtual PPP Adapter"
返回到我的新 Macs1 列的是每行的 NIC 列中的第一个 mac 地址。我一辈子都想不通如何将所有的mac地址作为一个列表返回。
我已经使用 Visual Studio Code 验证了正则表达式有效,并且 R 代码确实将所有 mac 地址作为字符向量返回。
做一些研究,我认为我需要将字符向量转换为列表,然后再将其返回给 Power BI。我尝试修改以下行但没有成功。
output <- within(dataset,{MACs1=as.list(getMacs(dataset$NICs))})
output <- within(dataset,{MACs1=as.data.frame(getMacs(dataset$NICs))})
我知道这将是一些#newbieFail,但我似乎无法弄清楚。感谢任何指示或建议。
干杯
【问题讨论】: