我需要能够告诉区别,可以包含一个字符串之间的字母和数字,而且可以包含一个字符串的数字,冒号和连字符.
>>> def checkString(s):
... pattern = r'[-:0-9]'
... if re.search(pattern,s):
... print "Matches pattern."
... else:
... print "Does not match pattern."
# 3 Numbers seperated by colons. 12, 24 and minus 14
>>> s1 = "12:24:-14"
# String containing letters and string containing letters/numbers.
>>> s2 = "hello"
>>> s3 = "hello2"
Run Code Online (Sandbox Code Playgroud)
当我checkString在上面的每个字符串上运行该方法时:
>>>checkString(s1)
Matches Pattern.
>>>checkString(s2)
Does not match Pattern.
>>>checkString(s3)
Matches Pattern
Run Code Online (Sandbox Code Playgroud)
s3是唯一一个没有做我想要的.我希望能够创建一个允许数字,冒号和连字符的正则表达式,但排除其他所有(或只是字母字符).谁能指出我正确的方向?
编辑:
因此,我需要一个接受的正则表达式:
229 // number
187:657 //two numbers
187:678:-765 // two pos and 1 neg numbers
Run Code Online (Sandbox Code Playgroud)
并拒绝:
Car //characters
Car2 //characters and numbers
Run Code Online (Sandbox Code Playgroud)
你需要匹配整个字符串,而不是像你现在那样匹配一个字符:
>>> re.search('^[-:0-9]+$', "12:24:-14")
<_sre.SRE_Match object at 0x01013758>
>>> re.search('^[-:0-9]+$', "hello")
>>> re.search('^[-:0-9]+$', "hello2")
Run Code Online (Sandbox Code Playgroud)
解释正则表达式:
+ 是一个量词,表示前面的表达式应尽可能多次匹配,但至少一次.^并$匹配字符串的开头和结尾.对于单行字符串,它们相当于\A和\Z.这样,您可以将整个字符串的内容限制为至少一个包长,并包含字符类中任何字符的排列.你之前做的是从主题字符串中的字符类中搜索单个字符.这就是s3包含匹配数字的原因.