2016-08-28 6 views
0

다음 문자열이 있습니다.Python 정규식 지원

예 :

  • 12 CG GRB
  • 6GRC 11.2 MK
  • 2 GR 1.75LRG

그리고 나는 다음과 같은 그룹

    에 휴식 싶습니다
  • [12, CG] [GRB]
  • ,363,210
  • [6 GRC] [11.2, MK]
  • [2 GR] 1.75 LRG]

I이 정규식 사용하고 - (.를? \ D +를 \ D *) *.? ([AZ] +)하지만 그것으로, 첫 번째 예제를 올바르게 캡처 할 수 없습니다. [12, CG] [GRB] 대신 [12, CG]를 얻습니다.

도움이 될 것입니다.

import re 
p = re.compile(ur'(\d+\.?\d*).*?([A-Z]+)') 
test_str = u"12 CG GRB" 

re.findall(p, test_str) 
+1

함께 당신의 코드를 게시하시기 바랍니다 질문이 – 0xtvarun

+0

입니다. 예제가 너무 적어서보고 있습니다.'(\ d * \.? \ d +)를 제안 할 수 있습니까?\ s * ([A-Z] +)'이지만, 이것은 필요 이상으로 일치 할 수 있습니다. –

+0

코드를 추가했습니다. – user3430556

답변

0

당신은 0 개 이상의 whitespasces 일치하도록 \s*.*? 교체 및 옵션 첫 번째 캡처 그룹을 만들 수 있습니다

(\d*\.?\d+)?\s*([A-Z]+) 
      ^^^^ 

regex demo를 참조하십시오.

참고 또한 서브 패턴 매칭 번호를 \d*\.?\d+으로 수정하여 .56과 같은 mathc 번호로 수정했습니다. 자신 만의 패턴을 유지할 수 있습니다.

패턴 자세한 사항 :

  • (\d*\.?\d+)? - 선택 캡처 그룹 1
    • \d* - 0 개 이상의 숫자
    • \.? - 선택 사양 인 점
    • \d+-1 이상의 숫자
  • \s* - 0 개 이상의 공백
  • ([A-Z]+) - 그룹 2는 하나 이상의 대문자 ASCII 문자를 캡처합니다.

re.findall (demo)를 사용, 튜플 목록으로 캡처 그룹의 내용을 효율적으로 활용하려면 다음

import re 
p = re.compile(r'(\d*\.?\d+)?\s*([A-Z]+)') 
s = "12 CG GRB\n6GRC 11.2 MK\n2 GR 1.75LRG" 
print(p.findall(s)) 
0
s = "12 CG GRB\n6GRC 11.2 MK\n2 GR 1.75LRG" 
re.split(r"(?<!\d)\s", s) 

출력은 다음과 같습니다

['12 CG', 'GRB', '6GRC', '11.2 MK', '2 GR', '1.75LRG'] 
+1

설명을 추가하십시오. 아이디어는 OP를 돕는 것이지, 코드 작성을 돕는 것이 아닙니다. –