2014-10-06 7 views
1

나는 파이썬에서파이썬에서 문자열 패턴을 바꾸고 바꾸는 방법은 무엇입니까?

re.sub(r"""\s*(\p{LD}+)\s+NEAR/(\d)\s+(\p{LD}+)\s*""",r""""$1 $3"~$2""",'foo NEAR/4 bar') 

같은 조각이있다.

예상 출력은
"foo는 바"~ 4

하지만 지금은

foo NEAR/4 bar 

내가 파이썬에 스칼라 코드를 변환하려고를 얻고있다. 스칼라 코드 (

val near_rex = """\s*(\p{LD}+)\s+NEAR/(\d)\s+(\p{LD}+)\s*""".r; 
val out = near_rex.replaceAllIn("foo NEAR/4 bar", """"$1 $3"~$2"""); 

스칼라 조각 나는 스칼라 몰라 여기 http://www.simplyscala.com/

답변

1

을 잘 작동, 그래서 \p{LD}+이 일치하도록되어 무엇인지 모르지만 [a-zA-Z0-9_]에 맞게 \w을 사용하고 foo는/바), 정규 표현식은 괜찮 :

>>> re.sub(r"""\s*(\w+)\s+NEAR/(\d)\s+(\w+)\s*""",r""""\1 \3"~\2""",'foo NEAR/4 bar') 
'"foo bar"~4' 
당신이 \1, \2을 사용해야합니다, 캡처 그룹을 반환하기 위해

... 대신 $1. 의견 Avinash 주권에 의해 제안


, 당신은 간단한 것을 사용하여 트리플 따옴표를 제거 할 수 있습니다 또한

re.sub(r'\s*(\w+)\s+NEAR/(\d)\s+(\w+)\s*',r'"\1 \3"~\2','foo NEAR/4 bar') 

\p{L} 스칼라 별 (아말 무랄리 학점)이 아니라입니다 "letter" category에 속하는 유니 코드 문자와 일치시키는 데 사용됩니다.

+2

따옴표와 혼동하는 이유는 무엇입니까? 're (r'\ s * (\ w +) \ s + NEAR/(\ d) \ s + (\ w +) \ s * ', r' '\ 1 \ 3 "~ \ 2', 'foo NEAR/4 bar ')'괜찮을 것입니다. –

+1

'\ p {LD} +'는 스칼라 고유의 것이 아닙니다. http://www.regular-expressions.info/unicode.html ("* 유니 코드 범주 *"에서)을 참조하십시오. –

관련 문제