2011-12-13 3 views
2

가끔 (OCR에서 제공)의 문자를 l 또는 I으로 대체하는 텍스트가 있습니다. 번호가 숫자 일 경우이 숫자를 1으로 변환하고 싶지만 혼자 있으면 혼자 남겨 둡니다. "숫자의 일부"는 다른 숫자 또는 l 또는 I에 인접한 것을 의미합니다. 따라서 1I3113으로 변경하고 1 I 3 만 남기고 싶습니다.정규식 앞에 또는 뒤에 숫자가있는 문자를 식별하는 정규식

$var =~ s/[lI](?=[lI\d])/1/g; 
$var =~ s/(?<=[lI\d])[lI]/1/g; 

한 단계에서이 작업을 수행 할 수있는 더 우아한 방법이 있나요 : 여기

내가 뭘하는지입니까? 즉, 어떤 정규 표현식이 [Il]과 일치합니까 앞에 [lI\d]또는 다음에 [lI\d]이 올 수 있습니까? 하지만, 김정일 (11)

$var =~ s/(?<=[lI\d])[lI]|[lI](?=[lI\d])/1/g; 

불쌍한 김 :

답변

6

당신은 alternation metacharacter|를 사용할 수 있습니다.

+0

아하, 고마워. 운 좋게 * 친애하는 지도자 *, 그는 내 데이터에 나타나지 않습니다. 또는 고맙게도 다른 이름. * Kimjong 11 *의 경우 – itzy

+0

+1. 긱 유머! –

5

llla111a으로 변환 하시겠습니까? 왜냐하면 당신의 정규 표현식도 그 변환을하기 때문입니다. 해결하려는 문제는 상황에 따라 자연스러운 것입니다 (숫자를 [Il]의 스트림과 인접하거나 사이에 끼워 넣을 수 있으며 그 후에 만 ​​1으로 변환 할 수 있습니다). 나는 너라면 루프를 쓴다. 내가 놓친 것을 바로 잡아라.

+0

내 컨텍스트에는 괜찮습니다. – itzy