如果字符串有任何使用正则表达式的数字,如何检查Python.2

时间:2014-05-27 13:09:28

标签: python regex numbers

我需要编写一个脚本,用户可以输入他们的名字(通过输入),脚本必须检查名称是否具有正确的格式(没有数字,没有Capslock,以大写字母开头)。这就是我到目前为止所做的:

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”,即使字符串中有一个数字。

如何让脚本检查整个字符串?

4 个答案:

答案 0 :(得分:2)

\w匹配字母以及数字和下划线。另外,不要忘记anchor正则表达式到字符串的末尾,否则它将在部分匹配时成功。例如,在"Ab1"上,如果您不使用"Ab"锚点,则子字符串$将与您的正则表达式匹配:

 re.search('^[A-Z][a-z]+$',name)

应该解决这个问题。

答案 1 :(得分:0)

import re

username = "john"

result = re.search(r'.*?(?!.*?(\d|[A-Z]))', username)

if result.groups()[0] is None:
    print "{} passed validation".format(username)

正则表达式:.*?(?!.*?(\d|[A-Z]))将匹配任何内容,只要其中没有数字或大写字母,请求。

答案 2 :(得分:0)

首先,如果要检查整个字符串,则需要锚定到字​​符串的开头和结尾。你有^开头的锚点,但你应该用$锚定到最后。你的正则表达式^[A-Z]{1}\w[a-z]+只检查字符串的前几个字符,这就是Ahj8k返回有效的原因。这也是非常天真的,因为它不会处理诸如麦当劳",#34;史密斯 - 琼斯","杰克逊Jr。等#34;或者" de Icaza"。如果我为一个名字写一个正则表达式,我会保持简单和宽容:^[A-Za-z\.\s\-]+$

答案 3 :(得分:0)

你犯的错误是\ 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

     

不行