我想匹配没有$
的金额。到目前为止,我已经尝试过(?<!\$)\d+\.\d{2}
。这可能很简单,但我很想念它:(
字符串
$100.00 50.00
1.99 $150.50 200.00
如何使比赛低于?
50.00
1.99 200.00
答案 0 :(得分:1)
仅供参考:您应该提供更实际的示例,因为目前,您可以通过以下方法解决此问题:使用空格分割并返回所有以$
开头的项目:
[x for x in text.split() if not x.startswith('$')]
我将在否定的前瞻中添加一个数字校验,并在右侧添加一个数字校验(因为\d{2}
仅匹配两个数字,但如果匹配3个或更多,则不阻止匹配)。 / p>
r'(?<![$\d])\d+\.\d{2}(?!\d)'
请参见regex demo。
详细信息
(?<![$\d])
-左侧不允许直接使用$
或数字\d+
-一个或多个数字\.
-一个点\d{2}
-两位数字(?!\d)
-右边不允许输入数字。import re
text = "$100.00 50.00\n1.99 $150.50 200.00"
print( [x for x in text.split() if not x.startswith('$')] )
# => ['50.00', '1.99', '200.00']
print( re.findall(r'(?<![$\d])\d+\.\d{2}(?!\d)', text) )
# => ['50.00', '1.99', '200.00']