2014-11-03 5 views
2

Java에서 html 테이블에서 정보를 가져 오는 프로그램에 몇 가지 문제가 있습니다. 나는 다음과 같은 정규식을 사용하는 모든 열에서 정보를 가져올 수 : 이것은 나를 위해 아주 좋은 작동Java에서 정규 표현식을 결합

<td>([^<]*)</td> 

. 이것은 또한 작동하고

<a[^>]*>(.*?)</a> 

아주 아주 좋은 : 는 Linknames를 가져 오는 동안 나는이 사용합니다.

<td>([^<]*)</td>|<a[^>]*>(.*?)</a> 
내가이 같은 일 것이라고 생각

:. 는하지만 가끔은 내가 그러므로 나는 이러한 정규 표현식을 결합하고 싶었다 링크가에있는 열에서 정보를 필요로

  • 을 그것은 모든를 얻을 수 물건이 링크를 경우 그것은 단지 LINKNAME에게 또한 얻을 <td> 사이 </td>

  • 입니다 것은

하지만 작동하지 않습니다. 저는 RegEx에서 최고가 아니기 때문에이 두 단계를 결합하는 데 도움이 필요합니다.

대단히 감사합니다.

+4

"Java의 html 테이블에서 정보를 가져 오는 프로그램에 몇 가지 문제가 있습니다." regex로 html을 파싱하지 마십시오 – Falmarri

+0

_이 것은 작동하지 않습니다. 사용중인 코드와 문제를 명확하게 보여주는 짧은 재현 가능한 예제를 보내주십시오. – Keppil

+0

많은 사람들이 HTML을 정규식으로 구문 분석하는 것을 선호하지 않는다는 것을 알고 있습니다. 그러나 그것은 항상 나를 위해 일하고있었습니다. 그리고 그것을 결합 할 수있는 가능성이 있음을 압니다. – TacoVox

답변

1

코드 내가 사용 :

Pattern pattern = Pattern.compile("<td>([^<]*)</td>|<a[^>]*>(.*?)</a>"); 

String line = "Here are the lines saved from the HTML downloader"; 

Matcher matcher = pattern.matcher(line); 
for (int startPoint = 0; matcher.find(startPoint); startPoint = matcher.end()) 
    { 
     System.out.prinln(matcher.group(1)); 
    } 

이 그냥 조각 -하지만 그것은 일반적으로 작동하는 방법 이잖아. 일반적으로 문자열은 배열에 저장됩니다.

+0

'matcher.group (1)'은 링크가 발견되면'null'을 반환합니다. – Keppil

+0

그들은 이미 결합되었습니다. 단일 캡처 그룹에 결합하려면 Java가 _Branch Reset_을 수행해야합니다. 매치마다 두 그룹 중 하나가 'null'이되고 그렇지 않은 그룹은 ' 하나만 확인하면됩니다. 'null'과 빈 문자열을 혼동하지 마십시오. – sln

+0

JSoup을 사용하여이 모든 것들을 구문 분석하려고 시도했지만 더 잘 작동합니다. 그러나 도움을 주신 여러분 께 감사드립니다! – TacoVox

관련 문제