2016-09-07 5 views
-1

OCR을 사용하여 이미지에서 텍스트를 추출합니다. 이 OCR에서 가장 괴롭히는 문제 중 하나는 때로는 원하지 않는 공간이 있다는 것입니다. OCR이 문자를 추적하는 단어를 발견했기 때문입니다.고유 문자 사이의 불필요한 공백을 제거하는 정규식

예를 들어 내가 가지고 :

var text = "CHA BLIS 1 ER CRU CONTROLEEC B E A U R O Y C a Chablisienne" 

내가하려고 노력 :

test.replace(/([A-Z])\s(?=[A-Z]\b)/, '$1') 

을하지만 그렇게 할 경우, 나는 결과로 가지고 :

CHA BLIS 1 ER CRU CONTROLEECBEAUROYC a Chablisienne 

을하지만 결과는해야 예상 be :

CHA BLIS 1 ER CRU CONTROLEEC BEAUROYCa Chablisienne 

절대적으로 필요한 것은 단일 문자를 모두 재 그룹화하는 것이지만 다른 단어는 변경하지 않는 것입니다.

경우 :

var text = "CHA BLIS 1 ER CRU CONTROLEEC BEAU R O Y C a Chablisienne" 

이 정상적으로 출력 : 시간의 적절한 조합을 발견하기 위해 보낸 후

CHA BLIS 1 ER CRU CONTROLEEC BEAU ROYCa Chablisienne 

나는 아직 성공하지 못했습니다.

ps : 대문자와 소문자간에 처리 차이가 없어야합니다.

+0

당신이 정교한 어떻게 대문자에 e 대 소문자 단일 문자를 처리해야합니까? –

+0

대소 문자간에 프로세스/처리의 차이점이 없습니다. – Toucouleur

답변

1

당신은 모두 함께 하나의 분리 문자를 부착해야하는 경우 :

\b([A-Za-z])\s+(?!\w\B) 

Live demo

그렇지 않으면 하나의 \b 단어 경계 토큰을 사용

\b([A-Z])\s+(?![^A-Z]) 

Live demo

0

word boundary anchors 사용하면 하나의 문자로 검색을 제한 할 수 있습니다

test.replace(/\b([A-Z]) (?=[A-Z]\b)/i, '$1') 

시험이 live on regex101.com을.

+0

'i' 수정자는 모든 것을 잘못되게 만듭니다. – revo

+0

@revo : 왜, 당신 의견으로? –

+0

그때 나는 majuscule이 소문자를 볼 수있는 예상 출력을 면밀히 살펴 보지 않았습니다. 그래서 당신의 대답은 유효합니다. – revo

관련 문제