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]+:字符串開(kāi)頭的一個(gè)或多個(gè)大寫(xiě)字母[a-z]+:大寫(xiě)字母后的一個(gè)或多個(gè)小寫(xiě)字母[\s]+:小寫(xiě)字母后有一個(gè)或多個(gè)空格[a-z]+: 空格后的一個(gè)或多個(gè)小寫(xiě)字母[\.!\?]+$:第二串小寫(xiě)字母后的一個(gè)或多個(gè)標(biāo)點(diǎn)符號(hào)(.、!或),然后字符串結(jié)束。?
你真正想做的事情:
^[A-Z][A-Za-z\s]+[\.!\?]$ https://regex101.com/r/r3CAdh/2
^[A-Z]:字符串開(kāi)頭恰好有一個(gè)大寫(xiě)字母[A-Za-z\s]+:一個(gè)或多個(gè)大寫(xiě)字母/小寫(xiě)字母/空格[\.!\?]$: 字符串末尾有一個(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]+)*[\.!\?]$/
解釋
^必須從輸入字符串的開(kāi)頭開(kāi)始[A-Z][a-z]*第一個(gè)單詞必須以大寫(xiě)字母開(kāi)頭,后跟任意數(shù)量的小寫(xiě)字母(\s[a-z]+)*在第一個(gè)單詞之后,可以有任意數(shù)量的附加單詞(也可以是零)。每個(gè)單詞前面必須有一個(gè)空格(您也可以只使用一個(gè)空格,而不是\s只允許空格但不允許制表符)并且至少包含一個(gè)小寫(xiě)字母[\.!\?]$標(biāo)點(diǎn)符號(hào)必須位于輸入字符串的末尾。
例如,這將允許
This is a valid sentence.
但禁止類(lèi)似的事情
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) 獲得超5個(gè)贊
從問(wèn)題是問(wèn)
它以大寫(xiě)字母開(kāi)頭,所以我們使用
^[A-Z].后面至少跟著一些小寫(xiě)字母或空格,以便我們可以使用
[a-z\s]+。并以句號(hào)、問(wèn)號(hào)或感嘆號(hào)結(jié)尾。所以我們可以使用
[\.\?!]$.\之前的and.稱(chēng)為?“轉(zhuǎn)義字符”,它用于轉(zhuǎn)義.and?因?yàn)樗鼈兌际钦齽t表達(dá)式操作的一部分。
好了,你的問(wèn)題的答案是result = re.search(r"^[A-Z][a-z\s]+[\.\?!]$", text)。
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
順便說(shuō)一句,這也有效。
re.search(r"^[A-Z][a-z\s].*[.?!]$", text)
添加回答
舉報(bào)
