2014-04-09 7 views
0

regex으로 약간 정신이 찢어졌습니다. 나는 다음과 같은 시나리오와 일치하는 정규 표현식을 마련 할 필요가 있지만, 지금까지 꽤 작동하지 않는 경우 다음 식을 가지고 올 만 한 :Python을 사용한 정규 표현식 도움말

(package)(\.)(path)(\s+)(=)()(').*?..*?..*?..*?(.).*?(') 

나는 두 개의 서로 다른 표현을 구축해야 .

식 # 1은 다음 문자열 중 하나와 일치해야합니다.

package.path = 'any string or path here' 
package.path = "any string or path here" 
package.path='any string or path here' 
package.path="any string or path here" 

식 # 2. 다음 문자열 중 하나와 일치해야합니다.

package.path = package.path .. 'any string or path here' 
package.path = package.path .. "any string or path here" 
package.path = package.path..'any string or path here' 
package.path = package.path.."any string or path here" 
package.path=package.path .. 'any string or path here' 
package.path=package.path .. "any string or path here" 

Regex Guru의 도움을 주시면 감사하겠습니다.

감사합니다.

+0

처음에는'.'은 정규식의 특수 문자이므로'\로 이스케이프하고 싶을 것입니다. – njzk2

+0

"모든 문자열 또는 경로"를 구성 할 수있는 것에 대해 좀 더 자세한 정보를 제공해 주실 수 있습니까? 경로에 슬래시 또는 백 슬래시가 포함되어 있습니까? 드라이브 문자가 들어 있습니까? 문자열은 숫자와 문자 만 포함합니까? 아니면 다른 문자 또는 공백을 포함 할 수 있습니까? 두 번째 부분에서는 리터럴'..'과 일치해야합니까, 아니면 다른 것을 상징합니까? – CAustin

+0

^또는 문자 클래스에 넣으십시오 (나는 그들이 탈출보다 눈이 편하다고 생각하는 경향이 있습니다) : [. – Sam

답변

1

처음에는 .은 정규식의 특수 문자입니다. \.

이면 +one or more을 의미합니다. 당신의 따옴표 마지막으로, 우리는 일치 견적을 불러 \1을 사용할 수 있습니다 ['"]

로 분류 할 수 있도록 공간은 ?

로 표시되는 현재 0 or 1 배, 문자 클래스는, []를 사용하여 표시

그걸 염두에두고

은, 첫 번째 표현은

package\.path\s?=\s?(['"]).*\1 

이고 두 번째는

package\.path\s?=\s?package\.path\s?\.\.\s?(['"]).*\1 
+0

잘 작동합니다. 감사. – user2643864

1

당신은 package\.path\s?=\s?(package\.path)?(\s\.\.\s)?('|").*?('|") 정규식을 사용할 수 있습니다

import re 

data = """package.path = 'any string or path here' 
package.path = "any string or path here" 
package.path='any string or path here' 
package.path="any string or path here" 
package.path = package.path .. 'any string or path here' 
package.path = package.path .. "any string or path here" 
package.path=package.path .. 'any string or path here' 
package.path=package.path .. "any string or path here" 
""" 


pattern = re.compile(r"""package\.path\s?=\s?(package\.path)?(\s\.\.\s)?('|").*?('|")""") 
for line in data.splitlines(False): 
    match = pattern.match(line) 
    print match.group(0) if match else "No match" 
1

표현 # 1 : package.path \ S = \의 [ ' "[
표현 #]] + [\ \ s의 w]"? 두 번째 : package.path \ s? = \ s? package.path \ s .. \ s [ ' "] [\ w \ s] + ['"]

관련 문제