具有不同格式的Java正则表达式数字提取

时间:2018-05-21 12:00:57

标签: java regex

我有一个字符串,可以用以下几种格式之一显示数字:

Name ProductA Price R 3 250

或者

Name ProductA Price R 500

我不知道价格会以何种格式出现,所以我想找两个。 我知道第一个String的正则表达式是:

\\bPrice\\sR\\s\\b*(\\d\\s\\d+)

第二个是:

\\bPrice\\sR\\s\\b*(\\d+)

但Regex如何检查两者并捕获价格编号?

2 个答案:

答案 0 :(得分:3)

使\\s\\d部分可选,如下所示:

\\bPrice\\sR(?:\\s(\\d))?\\s(\\d+)
--          ^^^^^^^^^^^^^

请注意,可选部件组是非捕获,可让您通过捕获第1组和第2组来检索价格的相关部分。

Demo.

答案 1 :(得分:1)

您可以为后续数字设置一个可选组(捕获第一组中的价格):

\bPrice\sR\s(\d+(?:\s\d+)?)

字符串文字:\\bPrice\\sR\\s(\\d+(?:\\s\\d+)?)

故障:

  • \bPrice\sR\s匹配文字字符串Price R
  • (开始捕获第一组
    • \d+匹配一系列数字
    • (?:\s\d+)?匹配空格前面的一组数字(如果存在),非捕获组
  • )捕获群组结束

或者使用正面的lookbehind来获得组0中的价格:

(?<=\bPrice\sR\s)\d+(?:\s\d+)?

字符串文字:(?<=\\bPrice\\sR\\s)\\d+(?:\\s\\d+)?

Live demo