正则表达式从字符串中提取价格

Posted

技术标签:

【中文标题】正则表达式从字符串中提取价格【英文标题】: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+(,\d1,100)"

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

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

编辑:

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

【问题讨论】:

尝试regex101.com 使用正则表达式 我已经这样做了,我设法获得美分,但无法获得(2)美分。没有理由给 -1,因为您的回复实际上没有帮助。 您可以使用\(2\)\s*(\d[\d,.]*) 并获取第 1 组的值。更具体的模式可以写成\(2\)\s*(\d+(?:,\d+)*\.\d+) 不是我投反对票。另一个很好的未来参考:regular-expressions.info/reference.html 抱歉,您试过我的解决方案了吗?有效果吗? 【参考方案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*|\d0,2(?:,\d3)*)))?(?:\.\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

【讨论】:

以上是关于正则表达式从字符串中提取价格的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式和外壳从字符串中提取值?

如何在 C# 中使用正则表达式从字符串中提取域名?

从字符串中提取分数、小数和数字的正则表达式[关闭]

如何使用正则表达式从字符串中提取第 n 个 URL?

从 HTML 中提取正则表达式和字符串

用于在数字之前从 csv 中提取字符串的正则表达式