5 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
您當(dāng)前的正則表達(dá)式不起作用,因?yàn)樗噲D尋找
^[A-Z]+[a-z]+[\s]+[a-z]+[\.!\?]$
: https://regex101.com/r/b96zXT/2
^[A-Z]+
:字符串開頭的一個(gè)或多個(gè)大寫字母[a-z]+
:大寫字母后的一個(gè)或多個(gè)小寫字母[\s]+
:小寫字母后有一個(gè)或多個(gè)空格[a-z]+
: 空格后的一個(gè)或多個(gè)小寫字母[\.!\?]+$
:第二串小寫字母后的一個(gè)或多個(gè)標(biāo)點(diǎn)符號(hào)(.
、!
或),然后字符串結(jié)束。?
你真正想做的事情:
^[A-Z][A-Za-z\s]+[\.!\?]$
https://regex101.com/r/r3CAdh/2
^[A-Z]
:字符串開頭恰好有一個(gè)大寫字母[A-Za-z\s]+
:一個(gè)或多個(gè)大寫字母/小寫字母/空格[\.!\?]$
: 字符串末尾有一個(gè)標(biāo)點(diǎn)符號(hào)

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
我建議以下正則表達(dá)式禁止連續(xù)空格和標(biāo)點(diǎn)符號(hào)之前的空格
/^[A-Z][a-z]*(\s[a-z]+)*[\.!\?]$/
解釋
^
必須從輸入字符串的開頭開始[A-Z][a-z]*
第一個(gè)單詞必須以大寫字母開頭,后跟任意數(shù)量的小寫字母(\s[a-z]+)*
在第一個(gè)單詞之后,可以有任意數(shù)量的附加單詞(也可以是零)。每個(gè)單詞前面必須有一個(gè)空格(您也可以只使用一個(gè)空格,而不是\s
只允許空格但不允許制表符)并且至少包含一個(gè)小寫字母[\.!\?]$
標(biāo)點(diǎn)符號(hào)必須位于輸入字符串的末尾。
例如,這將允許
This is a valid sentence.
但禁止類似的事情
This is not valid ! This is not valid either!

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
這應(yīng)該有效
import re
def check_sentence(text):
result = re.search(r"^[A-Z][A-Za-z\s]*[\.\?!]$", text)
return result != None
print(check_sentence("Is this is a sentence?")) # True
print(check_sentence("is this is a sentence?")) # False
print(check_sentence("Hello")) # False
print(check_sentence("1-2-3-GO!")) # False
print(check_sentence("A star is born.")) # True

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
從問題是問
它以大寫字母開頭,所以我們使用
^[A-Z]
.后面至少跟著一些小寫字母或空格,以便我們可以使用
[a-z\s]+
。并以句號(hào)、問號(hào)或感嘆號(hào)結(jié)尾。所以我們可以使用
[\.\?!]$
.\
之前的and.
稱為?
“轉(zhuǎn)義字符”,它用于轉(zhuǎn)義.
and?
因?yàn)樗鼈兌际钦齽t表達(dá)式操作的一部分。
好了,你的問題的答案是result = re.search(r"^[A-Z][a-z\s]+[\.\?!]$", text)
。
添加回答
舉報(bào)