2014-12-08 2 views
2

제 질문은 this one의 연속입니다. 기본적으로,과 같이 단어의 테이블이 내 목적을 위해프로그래밍 방식으로 regexes를 배우는 방법?

HAT18178_890909.098070313.1 
HAT18178_890909.098070313.2 
HAT18178_890909.143412462.1 
HAT18178_890909.143412462.2 

, 나는 이름의이 세트 터미널 .1 또는 .2 필요하지 않습니다. 그것은 3 자 수 - 나는 마지막 두 문자는 무시할 수있을 것입니다 곳에 이름의 내 다음 세트는 유사한 구조를 가질 것이라는 점을 보장 할 수 없습니다, 그러나

r = re.compile('(.*\.\d+)\.\d+') 

: 내가 수동으로 (파이썬 구문을 사용하여) 다음과 같은 정규 표현식을 쓸 수 있습니다 (예 : .12) 세퍼레이터도 바뀔 수 있습니다 (즉, .에서 _).

명시 적으로 정규식을 배우거나 불필요한 문자를 확인하는 적절한 방법은 무엇입니까?

+3

"정규식 배우기"는 무엇을 의미합니까? 정규식 구문을 배우십시오. "이 정규식 사용법은 무엇을 의미합니까?" 정규 표현식은 언어이며 규칙을 배웁니다. 그러나 규칙을 안다고해서 갑자기 "나는 너를 여름날과 비교할 것인가?"와 같은 정규 표현식을 없앨 수는 없다. –

+1

'.1'이 필요 없다는 것을 어떻게 알 수 있습니까? 당신이 그것을 알아 내기 위해 사용했던 기준이 당신의 학습 알고리즘과 관련 될 것입니다. – Kevin

+0

@MarcB : 이전 질문에서 OP는 일종의 기계 학습을 원합니다. – Kevin

답변

-1

영숫자가 아닌 문자로 나눌 수 있습니다. 이 경우에, 당신을 얻을 것이다

[^a-zA-Z0-9']+ 

,이 같은 몇 가지 문자열 : 거기에서 당신에

HAT18178 
890909 
098070313 
1 

은 단순히 필요한 적이없는 경우 마지막 하나를 버리고, 첫 번째 시퀀스를 처리에서 작업을 계속할 수 있습니다

1

흥미로운 문제입니다.

X         y 
HAT18178_890909.098070313.1  HAT18178_890909.098070313 
HAT18178_890909.098070313.2  HAT18178_890909.098070313 
HAT18178_890909.143412462.1  HAT18178_890909.143412462 
HAT18178_890909.143412462.2  HAT18178_890909.143412462 

문제는 하나의 솔루션 만 많은이되지 않는 것입니다.

인간이라 할지라도 당신이 원하는 정규식이 무엇인지 분명하지 않습니다.

이 데이터를 바탕으로, 나는 배울 수있는 가능성을 생각할 것입니다 : .{25}

고정 첫 번째 부분 : 다음 HAT18178_890909.

:

그냥 25의 고정 폭과 일치 각각의 단일 지점에는 2 개의 다양한 숫자가 있습니다 (2 가지 사례를 보여줌). 예. [01] (0 또는 1), [94] 다음 지점 등등은 좋은 해결책이 될 것입니다.

명백한 하나가 될 것

\d+ 그러나 그것은 또한 당신이 볼 \d{9}

수, 여러 정답이있다.

두 번째 점이 밑줄이면 대신이 정규 표현식이 작동합니다.

내 결론 :

문제는 그것이 정규식을 작성하는 것보다 기계 학습에 대한 데이터를 준비하기 위해 더 많은 일이 있다는 것이다.모든 것을 다 커버 할 수 있기를 원한다면, 완전한 데이터를 가져야하므로, 정규 표현식은 아마도 덜 효과적 일 것입니다.

관련 문제