Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get certified as a Fabric Data Engineer: Check your eligibility for a 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700. Get started

v-stephen-msft

在 Power BI Desktop 中使用正则表达式

场景: 
在 Power BI 中,当我们想要处理复杂和无序的数据时,使用 Power Query 添加许多步骤可能无法获得预期的结果。众所周知,Power Query不能使用正则表达式。如果我们能够调用Python脚本并使用正则表达式来处理数据,事情会变得简单起来。 

使用的表格: 

vstephenmsft_0-1724119990255.png

如上图所示,如果数据已导入到 Power BI 中,此时我们无法使用 Power Query 有效地处理数据,比如直接拆分出一个字段里包含的两种不同信息。在这种情况下,我们可以调用 Python 的 re 模块的正则表达式。

前提: 

如果要在 Power BI Desktop 中运行 Python 脚本,需要在本地计算机上安装 Python 和两个 Python 包(pandas  matplotlib)。有关详细信息,请参阅此文档: Power BI Desktop 中运行 Python 脚本。 

操作: 

将数据导入 Power BI Desktop 后,我们可以在 IDE 中运行 python 脚本,并在确认脚本能够正常运行后将其复制到 pbi 查询编辑器中的 python 脚本编辑器中。

 

 

import re 

import json 

  

# 自定义函数以获取电子邮件地址 

def get_find_emails(text): 

    emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", text) 

    emails = ';'.join(emails) 

    return emails 

  

# 自定义函数以获取电话号码 

def get_find_mobiles(text): 

    mobiles = re.findall(r"[1-9][0-9]{4,}", text) 

    mobiles = ';'.join(mobiles) 

    return mobiles 

  

email_list = [] 

tele_list = [] 

  

for i in range(len(dataset)): 

    text = dataset.iat[i, 1] 

    email = get_find_emails(text) 

    email_list.append(email) 

    tele = get_find_mobiles(text) 

    tele_list.append(tele) 

  

dataset['email'] = email_list 

dataset['tele'] = tele_list 

 

 

这段代码定义了两个函数:

get_ find_ Email(用于获取电子邮件地址的自定义函数)和 get_ find_ Mobile(用于获取电话号码的自定义函数),将对应的结果存储为两个列表形式,并添加到数据表中。

另外,我们可以在线搜索更多有关于正则表达式的使用方式。

单击“确定”以返回结果:

vstephenmsft_1-1724120506237.png

展开表格后,额外的email和tele列分别是我们想要获取的电话号码和电子邮件地址。

 

vstephenmsft_2-1724120528431.png

 

有关详细信息,请查看附件。

 

作者: 陆良
指导: Ula & Kerry

翻译:王雅洁