2017-05-03 3 views
1

文が大文字で始まり、Pythonで[?。!]で終わる場合、一致する必要があります。文字列の終わりに句読点を一致させるPythonの正規表現

EDITそれは[!?]最後のみを持っていますが、それは動作しません

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]は資本を探し スタート

'[^?!.]*'で開始と終了の間ですべてが?または!または.

を含むものを除いてOKであることを意味します

[?.!]$?または!または.

+0

負のルックアヘッドとそれに続く '.'は、それを達成するには複雑でおそらく非効率的な方法です。負の文字クラス '[^?!] *'の使用を検討してください。 – 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

関連する問題