我在Java中有一個正則表達式的問題。以下亦宜Java正則表達式模式不會做在線測試工具所說的
2x 1 piece
63x 9 pieces
4x 1 piece
1 piece
23 pieces
與此正則表達式:
((\w+)x\s)*(\w+)\s*(\w*)
大家都知道,我們要逃避Java中的字符串。我躲過了正則表達式,我試圖用這一個:
String regex = "((\\w+)x\\s)*(\\w+)\\s*(\\w*)";
現在到了我的問題:對正則表達式的所有在線服務記住我的模式是有效的,但藥粥的Java。他們不標記可能是錯誤的,所以我不能真正看到我的問題。這是我想在Java中使用的代碼:
String regex = "((\\w+)x\\s)*(\\w+)\\s*(\\w*)";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(someClassWithMethods.text());
int multiplier=0;
int value= 0;
String supplement = "";
if (m.find()) {
multiplier= Integer.parseInt(m.group(2));
value= Integer.parseInt(m.group(3));
supplement = m.group(4);
}
我調試了整個事情,看看發生了什麼事情,所有變量都如預期,但我仍然得到一個空組。這個正則表達式有什麼問題?
編輯
我已經改變了,由於一些評論幾件事情,我已經逮住我NumberException有附加條款,如果。現在我仍然沒有得到匹配的結果。那可能是什麼? 有我的新代碼:
String regex = "(?:(\\w+)x\\s)?(\\d+\\s+)(pieces?)";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(quantityCell.text());
int quantityMultiplier = 0;
int quantity = 0;
String supplement = "";
if (m.find()) {
if(m.group(1) != null){
quantityMultiplier = Integer.parseInt(m.group(1));
}
quantity = Integer.parseInt(m.group(2));
supplement = m.group(3);
}
你所說的 「空組」 呢?你得到的確切輸出是什麼?我試過了,它對我來說工作得很好... – Codebender
你的正則表達式真的很不高效。爲什麼不使用'(?:\\ w + x \\ s)?\\ d + \\ s + pieces?'(未經測試的代碼) – TheLostMind
我猜NumberFormatException?但是用你的代碼(如果不是while),我不認爲它會得到這個異常。 – nhahtdh