我有一个字符串,可以用以下几种格式之一显示数字:
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如何检查两者并捕获价格编号?
答案 0 :(得分:3)
使\\s\\d
部分可选,如下所示:
\\bPrice\\sR(?:\\s(\\d))?\\s(\\d+)
-- ^^^^^^^^^^^^^
请注意,可选部件组是非捕获,可让您通过捕获第1组和第2组来检索价格的相关部分。
答案 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+)?