Python regex do dopasowania interpunkcji na końcu wiersza


Muszę dopasować, jeśli zdanie zaczyna się od dużej litery, a kończy na [?.!] W Pythonie.

Edytować

on musi mieć [?.!]

tylko

na końcu,

ale zezwalaj na inne znaki interpunkcyjne w zdaniu

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)

Nie działa, po kilku zmianach wiem, że część
^ [A-Z]
jest poprawna, ale interpunkcja na końcu nie jest poprawna.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zrobiłem to dla siebie, a tylko za wyjaśnienie lub jeśli inni ludzie mają ten sam problem, to jest to, co zrobiła dla mnie sztuczka:
re.match('^[A-Z][^?!.]*[?.!]$', sentence) is not None


Wyjaśnienie:

gdzie
^ [A-Z]
szuka kapitału na początku
'[^?!.]*'
means everything in between start and end is ok except things containing
?
or
!
or
.
[?.!]$
must end with
?
or
!
or
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Użyj poniższego wyrażenia regularnego.
^[A-Z][\w\s]+[?.!]$

Demo Regex:

https://regex101.com/r/jpqTQ0/2
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)

Wyjście:
True
False
False

Demonstracja działającego kodu
http://ideone.com/7DTs5q
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Twoje wyrażenie regularne sprawdza jedną cyfrę z zakresu
[A-Z]
. Powinieneś zmienić coś takiego:
^[A-Z].*[?.!]$

Zmień
. *
na dowolny, który chcesz dopasować między wielką literą a interpunkcją na końcu wiersza.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się