2014-04-16 9 views
1

나는 자바와 정규 표현식 클래스, 특히 패턴과 매처를 사용하여 위의와 같이 번역 한 위키 백과 사전 데이터 덤프 다운로드를 사용하려고합니다.정규 표현식에서 시퀀스 대신 임의의 그룹 위치를 지정하는 방법은 무엇입니까?

내 주요 관심사 인 단어 정의 덤프는 html이나 xml 등이 아닌 고유 한 형식 인 원시 wiki-markup에 있습니다. 다양한 요소가 있지만 가장 어려운 템플릿은 템플릿입니다.

필자가 제기 한 것은 위치 필드가있는 특정 템플릿뿐 아니라 임의의 순서로 나타날 수있는 선택적 템플릿입니다. 거의 정규 작업을 수행하는 정규 표현식을 만들었지 만 필드가 바뀌거나 선택적으로 생략 된 모든 인스턴스를 처리하기에 적절하지 않습니다.

이 순서에서 발생 순서가 단순한 시퀀스보다 정교 할 때 정규 표현식 그룹 위치를 지정하는 방법을 알지 못합니다. http://en.wiktionary.org/wiki/Template:term

지금은 생략 정규식 (에서 내 최고의 자상, 필요한 추가 이스케이프 문자가를 만들기 위해 :

이 복잡한 템플릿 중 하나의 예는 다음 페이지에 설명 "용어"의 것입니다 문자열 자바 호환)는 다음과 같다 :

이 용어 템플릿의 진정한 예 작동
\{\{term\|(.+?)(?:\|(.*?))?(?:\|([\w, -]+?))?(?:\|lang=([\w-]+?))?(?:\|sc=(\w+?))?(?:\|tr=([\w, -]+?))?(?:\|pos=(\w+?))?(?:\|lit=([\w, -]+))?\}\} 

가 발생 같은 :

{{term|λόγος|logos|word|lang=grc}} 
{{term|verbum|verbō|for the word|lang=la}} 
{{term|*bʰer-||to carry|lang=ine-pro}} 
{{term|alternative lifestyle|lang=en}} 
{{term|שוין||already|lang=yi|tr=shoyn}} 
{{term|Bögge||goblin, snot|lang=nds}} 
{{term|as}} 

는하지만 다음과 같은 사항에 대해 제대로 작동하지 : 특정 순서 만 선택적으로 대신에, 어떤 그룹이 위치하며, 일부는 무작위로 나타날 수 있음을 지정하는 방법이있을거야

{{term|deus ex māchinā||device|pos=n|lit=god from a device|lang=la}} 
{{term|ри̏ба||fish|tr=rȉba|sc=Cyrl|lang=sh}} 
{{term|שוין|lang=yi|tr=shoyn}} 
{{term|lang=en|vocational}} 

. 예를 들어 많은 HTML 요소를 처리 할 때 공통적 인 문제입니다. 이 위치 정교함을 다루는 정규 표현식을 작성하는 방법에 대한 조언을 많이 주시면 감사하겠습니다. 정말 고마워! - 제프.

+0

에 대해 알려주는거야. 처음에는 모든 형식을 얻습니다. 즉, 두 번째 형식은 모든 형식 b 줄을 얻습니다. 왜 이것을 하나의 정규식으로 많이 매시합니까? – aliteralmind

+0

실용적인 데이터 수집의 필요성뿐만 아니라 내 부분에서 정규식에 대해 더 많이 배우고 싶습니다. 나는 지금 당신이 제안한 것을하고 있습니다. 하지만 제가 묻는 문제는 답을 가지고 있으며 정규 표현식에서 어떻게하는지 배우고 싶습니다. – Djedefrey

답변

0

당신의 정규식은 모든 라인과 일치합니다 (RegexBuddy, Java 맛). 정확히 말하면 당신이 원하는 것을 포착하는지 이해할 수는 없지만.

그러나 디버그가 약 10 분 동안 계속 작동하지 않고 응답이 없으므로 매우 느립니다. 이것은 매우 작은 입력 집합에도 불구하고. 마지막으로

... : 그것은 실제로 Debuggex에 작동하지 않습니다

^\{\{term\|(.+?)(?:\|(.*?))?(?:\|([\w, -]+?))?(?:\|lang=([\w-]+?))?(?:\|sc=(\w+?))?(?:\|tr=([\w, -]+?))?(?:\|pos=(\w+?))?(?:\|lit=([\w, -]+))?\}\}$ 

Regular expression visualization

Debuggex Demo

. 웬일인지 m 깃발과 내가 추가했던 ^$에도 불구하고, 그것은 선 시작과 끝에 정박하지 않고있다. 그들은 RegexBuddy에서 잘 작동합니다.

나는 이것이 정규 표현식에 대한 좋은 문제가 아니라고 생각하고있다. 아니 합리적 단일 정규식. |의 각 줄을 나누는 것은 방법이 문제를 처리하는 더 좋은 방법입니다.

정규식을 사용에 대해 당신을 낙담뿐만 아니라, 또한 왜 두 번 파일을 처리 할, 두 가지 형식이있는 경우에는 Stack Overflow Regular Expressions FAQ :

+0

답변 해 주셔서 감사합니다. 정규식 faq! 그러나이 템플릿 예제는 줄/레코드가 아니라 하나의 줄 정의 레코드에 포함될 수있는 많은 마크 업 요소 중 하나임을 지적해야합니다. 지금까지 단 한 줄을 처리하는 데 사용 된 코드는 700 줄이고 많은 정규식 패턴을 포함합니다! 다른 요소에도 중첩 된 요소가 있습니다. 따라서 앵커 사용은 작동하지 않습니다. – Djedefrey

+0

또한 특정 템플릿 예제가 올바르게 구문 분석되지 않는다고 말하면 템플릿이 식별되지 않는다는 것을 의미하지는 않지만 캡처 그룹이 항상 이러한 템플릿 중 하나를 격리하지는 못합니다. 템플릿 내에서 구분 된 필드. – Djedefrey