regex 捕获大于等于20 $的值(不含美分、货币符号和空格)

wdebmtf2  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(101)

我想捕捉$-(或£-)价格〉= 20,没有美分(便士),其中$(£)可以在价值之前或之后,货币符号可以与价值分开空格或不分开,例如:

$20
$3000
£ 60.67 (but only the '60'-part)
33$
500.99$ (but only the '500'-part)
90   £

比如:

(?:[^\d][$£] ?)([\d]{3,}|[2-9][\d]{1})|([\d]{3,}|[2-9][\d]{1})(?: *.?[0-9]* ?[$£])

...这工作,但更简单(或至少没有非捕获(?: )-语法,因为它不与我的正则表达式浏览器突出显示扩展.
我想用这个来突出显示价格,例如在亚马逊上通过一个regex浏览器扩展。如果你碰巧知道一个好的(甚至可能支持(?: )-语法),我很乐意听到你的建议,太:-)
先谢谢你了

nlejzf6q

nlejzf6q1#

您可以使用以下正则表达式:

(?<=[$£])\s*([2-9]\d|\d{3,})(?=[\.\s])|(?<!\.)([2-9]\d|\d{3,})(?=(?:\.\d+)?\s*[$£])

其将匹配分成两种情况:

  • 情况1:您的货币符号位于数值 * 之前 *
  • 情况2:您的货币符号出现在数值 * 之后 *

"案例1":(?<=[$£])\s*([2-9]\d|\d{3,})(?=[\.\s])

  • (?<=[$£]):货币符号后面跟...
  • \s*:空格
  • ([2-9]\d|\d{3,}):20或更大的数值
  • (?=[\.\s]):后跟点(如果是十进制)或空格

"案例2":(?<!\.)([2-9]\d|\d{3,})(?=(?:\.\d+)?\s*[$£])

  • (?<!\.):匹配项前面没有点
  • ([2-9]\d|\d{3,}):20或更大的数值
  • (?=(?:\.\d+)?\s*[$£]):后跟可选的点和数字(用于十进制)、强制空格和货币符号

检查here演示。

相关问题