簡體   English   中英

如何使用正則表達式在Python3.2中檢查字符串是否包含任何數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM