我试图从字符串中提取价格,但无法完全完成逻辑。
My String:(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?)
答案 0 :(得分:2)
您的regex匹配一个或多个数字\d+
,然后在捕获的组中匹配逗号和数字1到100次。该匹配1,127
但不匹配1,127.22
。如你所述,也没有条件检查它是否在(2)旁边。
这个正则表达式可以选择这样做:
\(2\)\s(\d+[,.]\d+(?:[.]\d+)?)
<强>解释强>
\(2\)
\s
(
(这是您的值所在的位置)\d+[,.]\d+
(?:[.]\d+)?
答案 1 :(得分:1)
你可以试试这个:
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]
答案 2 :(得分:0)
(?<=\(2\))\s*((:?^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[1-9])?)(?!\S))
借用here
中的num seq答案 3 :(得分:0)
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