2012-05-11 2 views
1

저는 신발 식별자 (SKU)의 신발 크기와 일치하는 작은 스크립트를 작성하고 있습니다.Python Regex와 일치하는 신발 크기

처리 할 수있는 몇 가지 사례가 있습니다. 주어진 다음 목록 :

sizes = ['315122-603 10 A', '315122-608_12.0', '317982-019', '364781-019_5.5Y', 'V24088-001_10', '609048-035 8.5', '7-20Spm8231B5 10', 'G17295-001_9.5'] 

나는 각각 (10,12,5.5 등 ..)의 크기를 얻을 수 있기를 원합니다.

정규 표현식의 내 지식은 매우 제한되어, 나는 여기 저기 몇 조각을 찾고 다음

r = '\d{1,2}.\d+' 
for size in sizes: 
    re.findall(r, size) 

['315122', '603'] 
['315122', '608', '12.0'] 
['317982', '019'] 
['364781', '019', '5.5'] 
['24088', '001'] 
['609048', '035', '8.5'] 
['7-20', '8231', '5 10'] 
['17295', '001', '9.5'] 

로하지만 당신이 작동하지 않습니다 볼 수있는 등장하고있다. 10 진수 앞의 숫자와 10 진수 뒤의 숫자 만 일치시킬 수 있기를 원합니다.

+1

신발 크기는'무엇을해야 317982-019''? –

+0

크기가없는 skus를 무시 (일치하지 않음)해야 함 – Paulo

+1

좋은 답변을 얻으려면 _us_에 신발 크기를 인식하는 방법을 알려야합니다. 샘플 입력과 정확한 * (의도 된) 결과가있는 테이블을 제공하십시오. – alexis

답변

3

몇 가지 문제 :

  • .는 정규 표현식에서 특별한 의미를 갖습니다. 문자 그대로 도트를 일치시키고 싶다면 탈출해야합니다.
  • 도트를 선택적으로 설정하는 것이 좋습니다.
  • \D, \b 또는 (?!\d)과 같은 기술을 사용하여 일치 전후에 더 이상 숫자가 없는지 확인하십시오.
  • 일반적으로 일반 문자열을 사용하여 정규식 패턴을 작성해야하므로 백 슬래시 시퀀스가 ​​제어 문자로 해석되지 않습니다.
  • re.findall 여러 일치 항목을 찾습니다. 일치하는 항목이 하나만 있다는 것을 알고 있다면 re.search을 사용하십시오.

이 시도 :

pattern = r'\D(\d{1,2}(?:\.\d+)?)(?!\d)' 

당신의 문자열의 일부 밑줄을 포함합니다 없거나 소수 구분. 이러한 경우에 어떤 일이 일어나는지 실제로 설명하지 않았으므로이 패턴은 예제의 모든 사례를 처리하지는 못하지만 잘하면 좋은 시작을 제공 할 것입니다.

가능한 모든 입력을 처리하기 위해 하나의 정규 표현식을 작성하는 대신 각 입력 유형에 대해 다른 정규식을 작성하는 것도 좋습니다.

+0

감사합니다. 질문을 업데이트하겠습니다. 당신의 대답은 매우 도움이되고 정말로 감사합니다 :) – Paulo

0

공간 또는 밑줄 뒤에 나오는 숫자 (자릿수, 소수점 이하 자릿수)가 처음 나타나는 것처럼 보입니다.

그래서

r'[ _](\d+(?:\.\d+)?)' 
관련 문제