2011-10-10 2 views
0

나는 "첫 번째와 교체!"로 둘러싸여 문자열을 잡으려고 노력하고있다 "와"_ "예를 들어파이썬의 re.sub()

:!. STR (!.!.

print re.sub(r'!.*?!','!_', 'str(!test!).strip()') 

너무 많이 잡아이 코드와 결과 - 테스트) 스트립()> STR (_ 시험) 스트립 (를)

내가 지금까지 가지고있는 코드입니다 is : str (! _). strip()

첫 번째 "!"에 0을 기입하는 방법에 대한 생각. 또는 양자 택일로, "!!" "! _"+ "!"를 추가하십시오. 그 끈을 묶어 라?

답변

0

"단어"의 두 번째 절반을 괄호로 그룹화하고 대체 문자열 \g<1>에 그룹을 사용해야합니다. 당신이 ()로 유지하려는 RE의 일부를 캡처, 그리고 대신 .

[^!]을 사용하고 대체 문자열에 \1를 사용합니다!

re.sub(r'!(.*?!)', '!_\g<1>', 'str(!test!).strip()') 
+2

기술적으로 CharString의 첫 번째 해결책은 원하는 것입니다. 나는 파이썬이 미리보기를 가지고 있다는 것을 잊었다. 더 효율적이고 이해할 수 있습니다. – mybluevan

1
print re.sub(r'!(?=.*?!)', '!_', 'str(!test!).strip()') 

긍정적 인 선견문을 사용합니다.

print re.sub(r'!(.*?)!', r'!_\1!', 'str(!test!).strip()') 

역 참조를 사용합니다.

1

는들 사이의 문자에서 ! 제외 다시 삽입하십시오.

print re.sub(r'!([^!]*!)', r'!_\1', 'str(!test!).strip()')