regex-匹配不带前缀的模式

时间:2020-07-09 19:04:59

标签: python regex

我想匹配没有$的金额。到目前为止,我已经尝试过(?<!\$)\d+\.\d{2}。这可能很简单,但我很想念它:(

字符串

$100.00 50.00
1.99 $150.50 200.00

如何使比赛低于?

50.00
1.99 200.00

1 个答案:

答案 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)-右边不允许输入数字。

Python demo

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']