#java #regex #matcher
#java #регулярное выражение #сопоставитель
Вопрос:
Я написал сопоставитель для сопоставления из следующего текста.
<TD><P>xyz... </P><P>Oiuye </P><P>Oture, </P><P>Option</P></TD><TD><P> EUR 0.20 </P></TD><Span></Span>
<TD><P>Foriegn </P></TD><TD><P> EUR 0.30 </P></TD><Span></Span>
Шаблон, который я хочу использовать, это:-
Pattern p = Pattern.compile("\</TD\>\<TD\>\<P\>(.*?)\</P\>");Matcher m_Fee_1 = p_Fee_1.matcher(row_xml);
m_Fee_1.find();
String Contract_Fee_Temp = m_Fee_1.group(1).trim();
Мне нужно захватить 0,20 евро и 0,30 евро.
Моя консоль показывает 0,20 евро 0,30 евро
И выдает ошибку, совпадение не найдено. Почему это происходит? Ничего, если я просто поймаю это исключение и возьму данные? Или как мне с этим справиться?
Комментарии:
1. Как вы используете сопоставитель ?. покажите нам код.
2. В качестве примечания к сайту вам не нужны все обратные косые черты тезисов:
Pattern.compile("</TD><TD><P>(.*?)</P>")
тоже подойдет, простой и читаемый…
Ответ №1:
Я полагаю, вы неправильно используете сопоставитель:
String[] str = new String[]{"<TD><P>xyz... </P><P>Oiuye </P><P>Oture, </P><P>Option</P></TD><TD><P> EUR 0.20 </P></TD><Span></Span> ", "<TD><P>Foriegn </P></TD><TD><P> EUR 0.30 </P></TD><Span></Span>"};
Pattern p = Pattern.compile("\</TD\>\<TD\>\<P\>(.*?)\</P\>");
for (String st : str) {
Matcher m = p.matcher(st);
while (m.find()) {
System.out.println(m.group(1));
}
}
Выдает:
EUR 0.20
EUR 0.30
Комментарии:
1. Он
EUR 0.30
также хочет сопоставить2. @AvinashRaj: код также работал для второго примера. Я опустил его, чтобы избежать беспорядка. В любом случае, я обновил ответ, чтобы включить оба сценария.
Ответ №2:
Вы просто можете перехватить исключение, если вы уже получаете то, что вам нужно.
try{
Pattern p = Pattern.compile("\</TD\>\<TD\>\<P\>(.*?)\</P\>");Matcher m_Fee_1 = p_Fee_1.matcher(row_xml);
m_Fee_1.find();
String Contract_Fee_Temp = m_Fee_1.group(1).trim();
//Print what ever you want
}
catch(IllegalStateException exception){}