2017-05-03 5 views
1

문장이 대문자로 시작하고 파이썬에서 [?.!]로 끝나면 일치해야합니다.문자열의 끝에 구두점을 매치시키는 파이썬 정규식

편집 그것은 [!.?] 끝 에서 을 가지고 있지만 그것은 작동하지 않습니다

import re 
s = ['This sentence is correct.','This sentence is not correct', 'Something is !wrong! here.','"This is an example of *correct* sentence."'] 

# What I tried so for is: 
for i in s: 
    print(re.match('^[A-Z][?.!]$', i) is not None) 

문장에서 다른 문장 부호를 허용해야합니다, 일부 변경 후 나는 ^[A-Z] 부분은 알고 맞지만 끝에 구두점을 매칭하는 것은 올바르지 않습니다.

답변

3

는 내가 자신을 위해 노력하고, 단지 설명을 위해 또는 다른 사람이 같은 문제가있는 경우이 나를 위해 속임수를 썼는지 무엇을 만들어 :

re.match('^[A-Z][^?!.]*[?.!]$', sentence) is not None 

설명 : ^[A-Z]는 자본을 찾습니다 시작

'[^?!.]*'는 시작과 끝 사이에있는 모든 ? 또는 ! 또는 .

,369을 포함하는 것을 제외하고는 괜찮 의미

[?.!]$? 또는 ! 또는 .

+0

부정적인 look-ahead와'.'가 뒤 따르는 것은 그것을 달성하기위한 복잡하고 비효율적 인 방법입니다. 네거티브 문자 클래스 사용을 고려하십시오 :'[^?!] * *'. – lenz

+0

감사합니다. – Ludisposed

1

아래의 정규식을 사용하십시오.

^[A-Z][\w\s]+[?.!]$ 

정규식 데모 : https://regex101.com/r/jpqTQ0/2


import re 
s = ['This sentence is correct.','this sentence does not start with capital','This sentence is not correct'] 

# What I tried so for is: 
for i in s: 
    print(re.match('^[A-Z][\w\s]+[?.!]$', i) is not None) 

출력 :

True 
False 
False 

Working code demo

+0

은 내가 가지고 있지하려는 경우 [?.!]하지만 마지막에, 문자열에 다른 곳에서는 표시로 끝나야합니다. – Ludisposed

+0

또한 위의 정규 표현식도 정상적으로 작동합니다. 정규 표현식 데모 링크를 확인하고 거기에 테스트 문자열을 사용해보십시오. –

+0

하지만 ","또는 ";"은 허용되지 않습니다. 또는 문장 안의 따옴표. – lenz

1

범위에서 한 자리에 대한 귀하의 정규식 검사.

^[A-Z].*[?.!]$ 

변경은 대문자와 문자열의 끝에 구두점 사이에 맞게 원하는대로에 .* : 당신은 같은 것으로 변경해야합니다.

+0

'. *'은 항상 피해야합니다. –

+0

@ChankeyPathak 사실이 아니기도하고 때로는 모든 것을 일치시키고 싶을 때가 있습니다. – Maroun