在正则表达式中捕获组和金钱符号

时间:2014-04-21 18:29:53

标签: regex parsing

我正在尝试编写一个带有字符串并将其解析为三个不同捕获组的正则表达式:

$3.99 APP DOWNLOAD – 200 11/19 – 1/21 3.99

Group 1: $3.99 APP DOWNLOAD – 200
Group 2: 11/29 – 1/28
Group 3: 3.99

有没有人有任何想法???

我没有太多捕获组的经验,也不知道如何创建它们。

即。我相信这个表达式可用于识别日期吗?

           /(\d{2}\/\d{2})/

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

Regex

([$]\d+[.]\d{2}.*?)\s*(\d{1,2}/\d{2}.*?\d{1,2}/\d{2})\s(\d+[.]\d{2})

因此,我们有3个捕获组(()),由\s*分隔,这意味着空白的0+个字符(这不是必需的,但它会删除捕获的尾随空格基团)。

第一个捕获组[$]\d+[.]\d{2}.*?匹配一个美元符号,后跟1个数字,后跟一个句点,后跟2个数字,然后是0 +个字符的惰性匹配(.*?)。这个懒惰匹配的作用是匹配任何内容直到我们的表达式中的 next 匹配(在本例中,我们的下一个捕获组)。

我们的第二个捕获组\d{1,2}/\d{2}.*?\d{1,2}/\d{2}匹配1-2位数,斜杠和2位数。然后我们使用任何字符的另一个懒惰匹配,后跟另一个日期。

我们的最终捕获组\d+[.]\d{2}会查找1位数,一个句点和2位数。

注意:我使用~作为分隔符,因此我们无需在日期中转义/。另外,我将$.放在字符类中,因为我认为它看起来比转义它们更清晰([$] vs \$)..但是可以工作:)