从单个单元格中的句子中提取具有相同前一个值的多个值。例如玩家 1、玩家 2

从单个单元格中的句子中提取具有相同前一个值的多个值。例如玩家 1、玩家 2

我试图从下面的表格中提取球员号码。

提取“玩家+(玩家号码)”的最佳方法是什么?

在此处输入图片描述

答案1

由于 OP 正在使用 Google Sheets,因此 Google Sheets 的功能可以帮助提取输出。

  1. 插入另一列。它将用于显示结果。
  2. 在此示例中,输入在 A 列,输出在 B 列。在单元格 B2 中输入公式:
=JOIN(CHAR(10), REGEXEXTRACT(A1,REGEXREPLACE(A1,"(Player \d+)","($1)")))

拖动公式来填充其他单元格。

结果 - Google 表格

答案2

在这里,我使用 PowerQuery 从维基百科中提取数据,将其转换为您文章中的格式,然后将球员提取到新表中,并附上原始数据的链接。我之所以包括这一点,只是因为我这样做是为了获得与您相同的数据,这对我来说是一项有趣的练习,我希望这对其他人来说也很有趣。

要直接找到问题的答案,请向下滚动到答案如下以粗体文本。

首先,我使用数据>获取和转换数据>来自 Web,然后输入地址:

https://en.wikipedia.org/wiki/Squid_Game#Episodes

在此处输入图片描述

我选择 Episodes 表:

在此处输入图片描述

然后我单击“转换”。PowerQuery 中的数据如下所示:

在此处输入图片描述

由于 Wikipedia 表格的格式,每集的描述都会在其他列(编号、标题、导演、编剧、原始发布日期)中重复。每集有两行 - 第一行包含所有其他信息,第二行包含重复的描述。

还有第 6 列,其中第一行为空白,第二行有描述。

在此处输入图片描述

首先,我使用“添加列”>“索引列”>“从 1 开始”来添加索引:

在此处输入图片描述

现在,我添加一个列来指示索引是奇数还是偶数。我使用添加列、自定义列,如下所示:

在此处输入图片描述

现在我打开左侧的查询窗格,右键单击 Episodes 查询并选择“复制”。这将创建“Episodes (2)”。我右键单击它并将其重命名为 Descriptions。

现在,我根据 IndexIsOdd=FALSE 过滤描述查询。我删除了 Index 列。我将 Column6 重命名为“Description”,然后通过选择要删除的列,然后右键单击并使用“删除列”,删除除“Description”之外的所有列。然后,我添加一个新的 Index 列,再次从 1 开始。所以现在,我有这个:

在此处输入图片描述

现在,我返回“Episodes”查询并过滤 IndexIsOdd=TRUE。我删除了 Column6、Index 和 IndexIsOdd 列。我还将“No.”列的数据类型更改为“Whole Number”。

接下来,我使用“主页”>“合并查询”,并按如下方式配置它:

在此处输入图片描述

这给了我:

在此处输入图片描述

我单击“描述”顶部的双箭头并进行如下配置:

在此处输入图片描述

所以,现在我已经正确格式化了表格。

在此处输入图片描述

答案如下

为了获取玩家数量,我选择“描述”列并右键单击并使用“拆分列”>“按分隔符”,然后按如下方式配置:

在此处输入图片描述

在这里我输入了“Player”(注意最后的空格)作为分隔符。

结果:

在此处输入图片描述

现在有些行的描述以球员编号开头,而有些则不是。我将筛选相关行,然后将数字提取到新列中,然后在数字前面添加单词“Player”。

我添加了一个新的自定义列,配置如下:

在此处输入图片描述

公式:

if Value.Is(Value.FromText(Text.Start([Description],3)), type number) then "Player " & Text.Start([Description],3) else ""

在此处输入图片描述

现在我只需过滤“Player”列以排除空白,然后隐藏“Description”列。然后,在进行我可能想要(或不想要)的任何其他更改后,我使用 Home>Close & Load:

在此处输入图片描述

以下是描述查询:

let
    Source = Web.Page(Web.Contents("https://en.wikipedia.org/wiki/Squid_Game#Episodes")),
    Data1 = Source{1}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Data1,{{"No.", type text}, {"Title", type text}, {"Directed by", type text}, {"Written by", type text}, {"Original release date", type text}, {"Column6", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1, Int64.Type),
    #"Added Custom" = Table.AddColumn(#"Added Index", "IndexIsOdd", each Number.IsOdd([Index])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"IndexIsOdd", type logical}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([IndexIsOdd] = false)),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Index", "IndexIsOdd", "No.", "Title", "Directed by", "Written by", "Original release date"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column6", "Description"}}),
    #"Added Index1" = Table.AddIndexColumn(#"Renamed Columns", "Index", 1, 1, Int64.Type)
in
    #"Added Index1"

以及剧集查询:

let
    Source = Web.Page(Web.Contents("https://en.wikipedia.org/wiki/Squid_Game#Episodes")),
    Data1 = Source{1}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Data1,{{"No.", type text}, {"Title", type text}, {"Directed by", type text}, {"Written by", type text}, {"Original release date", type text}, {"Column6", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1, Int64.Type),
    #"Added Custom" = Table.AddColumn(#"Added Index", "IndexIsOdd", each Number.IsOdd([Index])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"IndexIsOdd", type logical}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([IndexIsOdd] = true)),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Column6", "Index", "IndexIsOdd"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Removed Columns",{{"No.", Int64.Type}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type2", {"No."}, Descriptions, {"Index"}, "Descriptions", JoinKind.LeftOuter),
    #"Expanded Descriptions" = Table.ExpandTableColumn(#"Merged Queries", "Descriptions", {"Description"}, {"Description"}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Expanded Descriptions", {{"Description", Splitter.SplitTextByDelimiter("Player ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Description"),
    #"Changed Type3" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Description", type text}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type3", "Player", each if Value.Is(Value.FromText(Text.Start([Description],3)), type number) then "Player " & Text.Start([Description],3) else ""),
    #"Filtered Rows1" = Table.SelectRows(#"Added Custom1", each ([Player] <> "")),
    #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",{"Description", "Directed by", "Written by", "Original release date"}),
    #"Changed Type4" = Table.TransformColumnTypes(#"Removed Columns1",{{"Player", type text}})
in
    #"Changed Type4"

相关内容