2014-09-30 2 views
0

이전에 나는 아래와 같은 데이터를 얻고 있었다 :사용하여 데이터에서 구분 기호를 무시 정규식

09/09/2014 12:00:00 AM 840DACHUAY10000100000000712345 
내가 nbr_home

^.{23}.{11}(?P<nbr_home>.{19}) 

를 추출하기 위해 아래의 정규식을 사용했다

데이터는 이제 포함하도록 변경되었습니다 구분 기호 "|"

09/09/2014 12:00:00 AM |840|DACHUAY|10000100000000712345 
내 기존 정규식의 위치 추출을 변경하지 않으

, 나는 그냥 구분 기호의 발생을 무시하도록하는 방식을 수정하려는 "|" .

+1

은 단순히'의 모든 항목을 제거 할 수 |'전에 처리를? – OnlineCop

+0

응답 해 주셔서 감사합니다. 데이터 수정 권한이 없습니다. –

답변

1

제거 할 캡처 그룹을 게시해야 할 수도 있습니다. |
하지만 그렇지 않으면 올바른 문자가됩니다.

(.{23}.{11}.{34} 단축 될 수 있다는 것을 그냥 주)

# ^\|?(?:\|?.){23}\|?(?:\|?.){11}\|?(?P<nbr_home>\|?.{19}) 

^ 
\|? 
(?: 
     \|? 
     . 
){23} 
\|? 
(?: 
     \|? 
     . 
){11} 
\|? 
(?P<nbr_home> 
     \|? 
     .{19} 
) 

출력 :

** Grp 0 - (pos 0 , len 56) 
09/09/2014 12:00:00 AM |840|DACHUAY|10000100000000712345 
** Grp 1 - (pos 37 , len 19) 
0000100000000712345 
+0

위의 해결 방법을 테스트하고 알려 드리겠습니다 ... 감사합니다 –

+0

문제 없습니다. 테스트 결과입니다. – sln

2

당신은 | 일치하도록 패턴을 수정할 수 있지만이를 캡처 할 수 있습니다. 그런 다음 그룹 문자열에 대한 $1-4 :

^(.{23})(?:\|)(.{3})(?:\|)(.{7})(?:\|)(?P<nbr_home>.{20})$ 

예 :

http://regex101.com/r/cV8vZ1/1

관련 문제