[英]How to simply populate a dict in Python3.2 from a text file which has only string contents?
[英]How to check in Python3.2 if a string has any numbers using regex
我需要編寫一個腳本,在其中可以鍵入名稱(通過輸入),並且腳本必須檢查名稱的格式是否正確(無數字,無大寫字母,以大寫字母開頭)。 這是我到目前為止所擁有的:
import re
def inputName():
name = input("Enter your name: ")
if re.search('^[A-Z]{1}\w[a-z]+',name):
print("ok")
else:
print('not ok')
inputName()
我也嘗試過[^ \\ d]和\\ D和[^ 0-9],但仍然無法正常工作。 當我輸入“ A8hkjh”時,它返回“ not ok”,但是當我鍵入“ Ahj8k”時,即使字符串中有一個數字,它也會返回“ ok”。
如何使腳本檢查整個字符串?
\\w
匹配字母,數字和下划線。 另外,不要忘記將正則表達式錨定到字符串的末尾,否則它將在部分匹配時成功。 例如,在"Ab1"
,如果不使用$
錨,則子字符串"Ab"
將與您的正則表達式匹配:
re.search('^[A-Z][a-z]+$',name)
應該解決這個問題。
import re
username = "john"
result = re.search(r'.*?(?!.*?(\d|[A-Z]))', username)
if result.groups()[0] is None:
print "{} passed validation".format(username)
正則表達式: .*?(?!.*?(\\d|[AZ]))
可以匹配任何內容,只要其中沒有數字或大寫字母即可。
首先,如果要檢查整個字符串,則需要錨定到字符串的開頭和結尾。 您有一個以^
開頭的錨點,但您應以$
結尾的錨點。 您的正則表達式^[AZ]{1}\\w[az]+
僅檢查字符串的前幾個字符,這就是Ahj8k返回有效的原因。 它也很幼稚,因為它不會處理“麥當勞”,“史密斯·瓊斯”,“小傑克遜”之類的名字。 或“ de Icaza”。 如果我要為名稱編寫一個正則表達式,我將使其簡單而寬松: ^[A-Za-z\\.\\s\\-]+$
。
您犯的錯誤是\\ w取數字。
試試這個: regex101
這是一個非常酷的網站來測試您的正則表達式
import re
def inputName():
name = input('Enter your name: ')
if re.search("^[A-Z][a-z]+$", name):
print('ok')
else:
print("not ok")
此代碼適用於:
$>輸入您的姓名:Ahj8k
不好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.