Regex 如何在正则表达式中写入If条件?
我试图从以下字符串中获取金额: 送货费2美元Regex 如何在正则表达式中写入If条件?,regex,Regex,我试图从以下字符串中获取金额: 送货费2美元 促销—(第一次)(4美元) $7 新硬币赚了5美元 代 “新硬币赚了5美元”这一行可能在某个时候不会出现。我愿意捕获支付的金额,在本例中为“7”。我尝试了\.?\s*\n*([\d,]+)\s*\n*发行的\s*\n*在上,但这只会在文档中不存在“新赚5美元的硬币”时捕获金额。我读到了if-else条件和积极展望。但是,无法使其工作。关于如何捕获的任何建议?因为您需要的值总是在前面加上$,您可以使用另一行 \$(\d[\d,.]*)[\n\r]+(
促销—(第一次)(4美元)
$7
新硬币赚了5美元
代
“新硬币赚了5美元”这一行可能在某个时候不会出现。我愿意捕获支付的金额,在本例中为“7”。我尝试了
\.?\s*\n*([\d,]+)\s*\n*发行的\s*\n*在上,但这只会在文档中不存在“新赚5美元的硬币”时捕获金额。我读到了if-else条件和积极展望。但是,无法使其工作。关于如何捕获的任何建议?因为您需要的值总是在前面加上$
,您可以使用另一行
\$(\d[\d,.]*)[\n\r]+(?:.*[\r\n]+){0,2}Issued\s+on\b
您需要的值在组1中
详细信息
\$
-a$
字符
(\d[\d,.]*)
-第1组:一个数字,后跟任何0+位、、
或
字符
[\n\r]+
-1个或多个CR或LF符号
(?:.[\r\n]+){0,2}
-0,重复1或2次0+字符(换行符除外),后跟1+LF/CR符号
Issued\s+on\b
-Issued
,1+空格,on
作为一个完整的单词(因为\b
是一个单词边界)
看
:
您可以像(?(?=regex)then | else)
那样执行,但请注意,(?=)
是向前看的,长度为零,因此您的then条件也必须与括号中的表达式相匹配
您还可以以某种方式生成更复杂的表达式
(?(?=条件)(then1 | then2 | then3)|(else1 | else2 | else3))
其中then1,then2,then3
按优先级降序排序,因为第一个匹配的“then”条件将跳过所有其他条件
您可以查找更多信息为什么不干脆^\$(\d+)$
?请看,您如何描述要匹配的上下文?您想要的值是否始终位于单独的行上?请尝试在
上发布(^\$(\d[\d,]*)[\r\n]*(?:.[\r\n]+)*也可以()。@WiktorStribiżew只有在我的金额少于1000美元时才有效。超过$1000,写为$1000,并且金额可能为$5.6,然后^\$(\d[\d,.]*)$
?它是否总是在前面加上$
,并且在单独的一行?@WiktorStribiżew是的,它总是在单独的一行前面加上$。问题中显示的文档是一家公司的收据。我正在下载收据的HTML并删除HTML标记以仅显示文本。因此,在这两者之间可能会有空格和新行。例如:$7可能写在宣传片下面的几个空格和两行之后。这就是为什么我在
@SuloveBista上写了这个正则表达式\?\s*\n*([\d,]+)\s*\n*发出的\s*\n*好的,在
发出的之前可能会有一两行?我已编辑解决方案以满足这些要求。我希望他们是最后一个。1行或2行可以在金额之前,也可以在金额之后。
import re
rx = r"\$(\d[\d,.]*)[\n\r]+(?:.*[\r\n]+){0,2}Issued\s+on\b"
s = "Delivery Charge $2\nPromo - (FIRST) ($4)\n$1,000.55\nNew Coins earned $5\nIssued on behalf of ......................."
match = re.search(rx, s, re.M)
if match:
print(match.group(1)) # -> 1,000.55