2012-02-01 3 views
5
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

text = "aaaa[ab][cd][ef]" 

a = re.compile("^(\w+)(\[\w+\])*$").findall(text) 

print a 

내가 그들 모두를 필요로하는 마지막 발생을 얻을 수 있지만, 반환파이썬 : 정규식은

[('aaaa', '[ef]')] 

로 :

a = re.compile("\[\w+\]").findall(text) 

내가 그들 모두를 얻을 수 있지만, 첫 번째 단어는 밖으로 ...

['[ab]', '[cd]', '[ef]'] 

이 텍스트는 임의의 텍스트입니다. 유래의 standars 품질 f를

다음

답변

0

결국이 코드와 함께 할 :

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

text = "aaaa[ab][cd][ef]" 

var = [] 
if re.match("^(\w+)(\[\w+\])*$", text): 
     a = re.findall("^\w+", text)[0] 
     var.append(a) 
     b = re.findall("\[\w+\]", text) 
     for i in b: 
       var.append(i) 
print var 

출력

>>> a = re.compile(r"^(\w+)((?:\[\w+\])*)").findall(text) 
>>> print a 
[('aaaa', '[ab][cd][ef]')] 

당신이 ['aaaa', '[ab]', '[cd]', '[ef]'] 대신 여기 위에 표시되는 내용의 결과를 얻기 위해 필요한 경우 하나의 방법이다 :

['aaaa', '[ab]', '[cd]', '[ef]'] 

이 모든 솔루션은 훌륭합니다. 감사합니다. :)

3

당신이 그것을 할 수있는 방법입니다

In [14]: a = re.compile(r"(\w+|\[\w+\])").findall(text) 

In [15]: print a 
['aaaa', '[ab]', '[cd]', '[ef]'] 

각각의 일치 (또는 괄호없이) 문자의 한 그룹을 반환합니다.

+0

mmm하지만 첫 번째 단어없이 작동합니다 ... grgrgrgrgrgr – ZiTAL

1

일치 항목 : "^(\w+)" 부분은 "aaaa"이고 "(\[\w+\])*$" 부분은 "[ab][cd][ef]"과 일치합니다. 하나의 요소 (튜플) 목록을 얻습니다. 따라서 하나의 일치 항목 만 있습니다. regexp에서 사용하는 각 괄호 쌍은 내부에있는 내용과 일치하는 텍스트를 포함하여 튜플에 요소를 생성합니다. 두 쌍이 있으므로 튜플에 두 개의 요소가 있습니다. 두 번째 괄호 쌍이 별표가 붙지 만 그 결과가 여러 번 "지정"됩니다 (마지막 값을 유지하는 것처럼 보임) : 괄호 자체가 곱해지지 않으므로 더 큰 튜플을 얻지 못합니다.

나는 당신이 무엇을 기대하는지 모르겠다. 그래서 나는 regexp가 제안하는 것을 모른다.

+0

2 단계로 진행합니다. 아무런 문제가 없습니다 :) 정보 주셔서 감사합니다. – ZiTAL

1

aix의 대답에 대한 귀하의 의견에 따라 괄호로 묶지 않은 부분이 일치하도록 요구하는 것처럼 보입니다. 어쩌면 이와 같은 것이 무엇입니까?

>>> match = re.compile(r"^(\w+)((?:\[\w+\])*)").search(text) 
>>> a = [match.group(1)] + match.group(2).replace("][", "] [").split() 
>>> print a 
['aaaa', '[ab]', '[cd]', '[ef]']