2009-10-29 3 views
11

파이썬 정규 표현식을 사용하여 문자열에서 수학 표현식을 찾으려고합니다. 문제는 슬래시가 예기치 않은 일을하는 것 같습니다. 나는 [\w\d\s+-/*]*이 수학 표현식을 찾는데 유용 할거라 생각했지만 어떤 이유로 쉼표도 찾습니다. 약간의 실험을 통해 앞으로 슬래시가 범인임을 알 수 있습니다. 예를 들어 :파이썬 정규 표현식의 슬래시

>>> import re 
>>> re.sub(r'[/]*', 'a', 'bcd') 
'abacada' 

은 분명히 앞으로 문자 사이의 일치를 슬래시 (별표가있는 경우에만하지만 그것은 문자 클래스 인 경우에도). 백 슬래시는 이스케이프 처리하지 않습니다. 나는 잠시 동안 사냥을 해봤고 그것에 대한 문서를 찾지 못했습니다. 어떤 포인터?

답변

19

파이썬의 모듈에서 here for documentation을보십시오. 쉼표를 포함하는 일이 [+-/] 일치 +, /와 사이의 ASCII 값 :

나는 그것이 /, 그러나 당신의 첫 번째 문자 클래스 오히려 -하지라고 생각합니다.

아마 문서 도구 도움말에서이 힌트 :

당신이 ']'또는를 포함 할 경우

'-'세트 내부, 백 슬래시를 앞에, 또는 첫 번째 문자로 놓습니다.

+0

RTFM은 적절한 대답이 아닙니다. 다른 대답은 정확합니다. –

7

이 0보다 작거나 이상이되도록 바꾸려면 'a'으로 지정하십시오. 따라서 각 "문자 없음"을 'a'으로 대체합니다. :)

아마 [/]+, 즉 하나 이상의 슬래시를 의미했을 것입니다.

편집 : 원래 문제를 해결하기 위해 Ber's answer을 읽으십시오. 전체 질문을 신중하게 읽지는 않았습니다.

2

r '[/] *'는 "0 개 이상의 슬래시와 일치"를 의미합니다. 'b'& 'c'와 'c'& 'd'사이에는 정확히 0 개의 슬래시가 있습니다. 따라서 해당 경기는 'a'로 대체됩니다.

2

*은 인수가 0 번 이상 일치하므로 빈 문자열과 일치합니다. 빈 문자열은 두 개의 연속 된 문자 사이 (논리적으로)입니다.

>>> re.sub(r'/', 'a', 'b/c/d') 
'bacad' 

documentation 파이썬에서 정규 표현식의 구문을 설명 : 따라서 슬래시에 관해서는

>>> import re 
>>> re.sub(r'x*', 'a', 'bcd') 
'abacada' 

, 그것은 특별한 치료를받지 않습니다. 보시다시피 슬래시에는 특별한 기능이 없습니다. 내부 광장 대시 -범위을 의미 괄호 때문에

[\w\d\s+-/*]* 또한, 쉼표의를 발견하는 이유입니다. 이 경우 +/ 사이의 모든 문자는 필요하지 않지만 문자는 +, -/입니다. 따라서 마지막으로 문자로 대시를 작성하십시오 : [\w\d\s+/*-]*. 그것은 그것을 고쳐야한다.

관련 문제