2009-06-15 4 views
2

파이썬에 문제가있어 예상치 못한 결과가 있습니다. 다음은 샘플 코드입니다.[: numeric :]이있는 Python 정규 표현식

number = re.search(" [0-9] ", "test test2 test_ 2 333") 
print number.groups() 

number = re.search(" [[:digit:]] ", "test test2 test_ 2 333") 
print number.groups() 

첫 번째 블록에서 객체가 반환되지만 아무 것도 반환되지 않습니다. 내가 "2"문자열을 가져야한다고 생각하는 곳.

두 번째 블록에서 나는 심지어 객체를 얻지 못한다. 여기서 나는 expection 문자열 "2"를 얻는다.

내가 bash는 모든 일에이 작업을 수행 할 때 잘 보이지만 :

echo "test test2 test_ 2 333" | grep " [[:digit:]] " 
echo "test test2 test_ 2 333" | grep " [0-9] " 

누군가가 나를 도울 수주십시오?

답변

3

그룹() 메서드는 캡처 그룹을 반환합니다. 그것은 당신이 예상했던 경우를 대비하여 이 아니고 귀환 그룹 0입니다. 괄호를 사용하여 캡처 그룹을 나타냅니다. 예 :

>>> number = re.search(" ([0-9]) ", "test test2 test_ 2 333") 
>>> print number.groups() 
('2',) 

두 번째 예에서 Python의 re 모듈은 "[: digit :]"구문을 인식하지 못합니다. \d을 사용하십시오. 예 :

>>> number = re.search(r" (\d) ", "test test2 test_ 2 333") 
>>> print number.groups() 
('2',) 
1

이게 당신이 찾고 있는게 있니?

>>> re.findall(r'([0-9])', "test test2 test_ 2 333") 
['2', '2', '3', '3', '3'] 
+0

완벽하게 작동합니다. 그리고 기다리고있는 동안 나는 계속 작업을하고 잘 작동하는 "re.finditer"를 발견했습니다. 그런데, 나는 POSIX 문자 클래스가 파이썬에서 지원되지 않는다는 것을 깨달았습니다. – jdcaron

+0

당신은 나머지를 이해하기 때문에 다행! 다른 대답은 훨씬 더 포괄적입니다. (나는 예기치 않게 끌어 당기고 정교하게 만들 기회를 얻지 못했다.) – bernie

+0

실제로 더 중대한 선을 받으려면 대신 Laurence Gonsalves의 대답을 받아 들일 것을 요청할 것입니다 (그것이 가능하다면) : http : // stackoverflow. com/questions/994178/python-regular-expression-with/994218 # 994218 – bernie

2

groups() (및 기타) 기능과 함께 사용할 내용을 캡처하는()이 없습니다.

number = re.search(" ([0-9]) ", "test test2 test_ 2 333") 
print number.groups() 

파이썬이 지원하지 않기 때문에 이것은 그러나 작동하지 않습니다 [[: 번호 :]] 표기

number = re.search(" ([[:digit:]]) ", "test test2 test_ 2 333") 
print number.groups() 
1
number = re.search(" [0-9] ", "test test2 test_ 2 333") 
print number.group(0) 

그룹()는 1까지 (약간 이상한 그룹을 반환 다른 언어에 익숙하다면).

0

.groups()는 일치하는 괄호 안에 값을 반환합니다. 이 정규식에는 괄호로 정의 된 영역이 없으므로 그룹은 아무 것도 반환하지 않습니다. 사용자는 원하는 :

m re.search = ("([0-9])", "테스트 TEST2 2 TEST_ 333"))를 m.groups ( ('2')

+0

@adam : 좋은 대답입니다! 팁 : 코드를 강조 표시하고 ctrl-k를 눌러 구문 강조 표시로 코드의 형식을 올바르게 지정하십시오. – bernie