【问题标题】:Regex Extracting Price out of String正则表达式从字符串中提取价格
【发布时间】:2018-06-21 09:34:33
【问题描述】:

我正在尝试从字符串中提取价格,但无法完全完成逻辑。

我的字符串:(2) 1,127.22 abcdfg sdkjf 20,200.01 abcdfg sdfkgj (2) 10.28

我想做的是:

to find all "(2)" in the string and then extract the full price next to it. 

My regex pattern is: "\d+(,\d{1,100})"

我的模式只在大字符串中找到 1,127, 20,200 10 并且它也没有检查它是否在 (2) 旁边的条件。

我想得到全价:1,127.22 和 10.28

编辑:

设法通过正则表达式获得美分:\d+(,\d{1,100})(.\d\d?)

【问题讨论】:

标签: c# python regex vb.net uipath


【解决方案1】:

您的 regex 匹配一个或多个数字 \d+,然后在捕获的组中匹配一个逗号和一个数字 1 到 100 次。匹配 1,127 但不匹配 1,127.22。正如你所提到的,也没有条件检查它是否在 (2) 旁边。

这个正则表达式可能是一个选项:

\(2\)\s(\d+[,.]\d+(?:[.]\d+)?)

说明

  • 匹配 (2) \(2\)
  • 匹配一个空格\s
  • 一个捕获组((这是你的价值观所在)
  • 匹配一位或多位数字、逗号或点和一位或多位数字\d+[,.]\d+
  • 一个可选的非捕获组,它匹配一个点后跟一个或多个数字(?:[.]\d+)?
  • 关闭捕获组

Output with C#

【讨论】:

    【解决方案2】:

    你可以试试这个:

    import re
    s = "(2) 1,127.22 abcdfg sdkjf 20,200.01 abcdfg sdfkgj (2) 10.28"
    vals = re.findall('(?<=\d\)\s)[\d\.,]+', s)
    

    输出:

    ['1,127.22', '10.28']
    

    如果你想要一个浮点列表,而不是字符串:

    vals = list(map(lambda x:float(re.sub(',', '', x)), re.findall('(?<=\d\)\s)[\d\.,]+', s)))
    

    输出:

    [1127.22, 10.28]
    

    【讨论】:

      【解决方案3】:

      (?&lt;=\(2\))\s*((:?^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[1-9])?)(?!\S))

      here借来的num seq

      【讨论】:

        【解决方案4】:

        没有正则表达式的 VB.NET 答案。教你如何玩弦乐

                Dim SplitStr As String() = New String() {"(2)"}
                Dim mystring As String = "(2) 1,127.22 abcdfg sdkjf 20,200.01 abcdfg sdfkgj (2) 10.28"
        
                Dim PriceList As New List(Of Decimal)
                For Each xItem In mystring.Split(SplitStr, StringSplitOptions.RemoveEmptyEntries)
                    PriceList.Add(Convert.ToDecimal(xItem.Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0)))
                Next
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-25
          • 1970-01-01
          • 1970-01-01
          • 2019-03-13
          • 1970-01-01
          • 2015-10-02
          • 2021-10-19
          • 2016-03-23
          相关资源
          最近更新 更多