ai didi

excel - 在excel中使用正则表达式从单位/字符串中提取第一个整数/小数

转载 作者:行者123 更新时间:2023-12-04 22:11:41 24 4
gpt4 key购买 nike

我希望使用正则表达式函数分离以下数据,如下所示:
enter image description here
要使用的功能:

let   fx=(text,regex)=>
Web.Page(
"<script>
var x='"&text&"';
var y=new RegExp('"&regex&"','g');

var b=x.match(y);
document.write(b);
</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}

in
fx
协议(protocol):
  • 文本 - 第 1 列
  • 列表项

  • 正则表达式 - \\d+\\.?\\d+这成功地提取了数值,但是:
  • 我不确定这是否是删除第一个整数/数字的正确正则表达式。
  • 我不确定如何使用正则表达式仅提取单位。尽管进行了各种尝试,它似乎还是遇到了错误。例如\D+尽管它在链接上工作,但不会返回非数值。据说 15 ng/m3 如果这确实有效,它只会返回 ng/m3。我想知道函数本身是否存在问题。

  • 码:
    let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Invoked Custom Function1" = Table.AddColumn(#"Changed Type", "fnRegexExtr2", each fnRegexExtr2([Column1], "\\d+\\.?\\d+")),
    #"Invoked Custom Function" = Table.AddColumn(#"Invoked Custom Function1", "fnRegexExtr2.1", each fnRegexExtr2([fnRegexExtr2], "\\D+"))
    in
    #"Invoked Custom Function"
    用“^[^\s]+”更新:
    enter image description here
    数据:
    1200 mg/kg bw/day
    24 mg/kg/day
    0.79 mg/kg bw/day
    15 ng/m3
    15 ng/m 3
    Not Limited
    30mg/m³

    最佳答案

    函数本身没有问题,问题在于使用的模式:

    数字部分 : 您目前使用 \\d+\\.?\\d+这基本上意味着; “任何 1+ 数字后跟一个可选的点和至少另外 1+ 数字”。因此,字符串中的任何位置至少有两个数字。适当的正则表达式是:

    ^\\d+(?:\\.\\d+)?
    意义:
  • ^ - 起跑线 anchor ;
  • \\d+ - 1+(贪婪)数字;
  • (?:\\.\\d+)? - 可选的非捕获组,以匹配文字点,后跟至少 1 个以上的数字。

  • 单位:您的图案 [\D+][2]匹配第一类中的单个字符,该字符是非数字 文字加号。您的第二个字符类与文字 2 匹配。因此您正在寻找“A2”或“+2”等模式。适当的正则表达式将取决于您的输入。

    提案 :
    previous回答我已经建议了一个不同的基于 JS 的函数,来替换数据而不是匹配数据。为此添加:
    (x,y,z)=>
    let
    Source = Web.Page(
    "<script>var x="&"'"&x&"'"&";var z="&"'"&z&
    "'"&";var y=new RegExp('"&y&"','g');
    var b=x.replace(y,z);document.write(b);</script>")
    [Data]{0}[Children]{0}[Children]{1}[Text]{0}
    in
    Source
    现在为两列尝试模式:
    ^(\\d+(?:\\.\\d+)?)?\\s*(.+)$
    将值替换为 $1对于数字部分,使用 $2为剩余单位。
    enter image description here
    let
    Source = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Invoked Custom Function1" = Table.AddColumn(#"Changed Type", "Nr", each fnRegexExtr([Column1], "^(\\d+(?:\\.\\d+)?)?\\s*(.+)$", "$1")),
    #"Invoked Custom Function2" = Table.AddColumn(#"Invoked Custom Function1", "Unit", each fnRegexExtr([Column1], "^(\\d+(?:\\.\\d+)?)?\\s*(.+)$", "$2")),
    #"Replaced Errors" = Table.ReplaceErrorValues(#"Invoked Custom Function2", {{"Nr", null}, {"Unit", null}})
    in
    #"Replaced Errors"

    第二个选项是用分隔符替换该值,您稍后会在该分隔符上拆分:
    let
    Source = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "fnRegexExtr", each fnRegexExtr([Column1], "^(\\d+(?:\\.\\d+)?)?\\s*(.+)$", "$1|$2")),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Invoked Custom Function", "fnRegexExtr", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"Nr", "Unit"})
    in
    #"Split Column by Delimiter"

    关于excel - 在excel中使用正则表达式从单位/字符串中提取第一个整数/小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72216022/

    24 4 0
    文章推荐: excel - 使用 Excel 查找功能时避免触发 'Select' 触发器
    文章推荐: excel - 从列的最后一行自动填充到整个工作表的最后一行
    文章推荐: excel - 我必须将 excel 行转换为单独的文本文件,并且文本文件应该是 UTF-8 编码
    文章推荐: excel - 如何自动过滤具有来自特定范围的值的列
    行者123
    个人简介

    我是一名优秀的程序员,十分优秀!

    滴滴打车优惠券免费领取
    滴滴打车优惠券
    全站热门文章
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com