2014-09-25 40 views
1

我需要过滤所有包含一个或多个数字,一个或多个大写符号和一个或多个小写符号的字符串。以任何顺序查找符号条目

我创建了下一个正则表达式:[0-9]+[A-Z]+[a-z]+。它的工作原理与我想要的一样,但有一些问题。它只能过滤字符串,如果它们有数字,大写,小写字母,并且只按此顺序。我知道这必须是一些修复指定,如“找到这个字符串的任何部分,并以任何顺序”。但我无法在文档中找到它。

有一些例子:

input: d23de32 output: false 
input: ffFF88 output: true 
input: ferGr444 output: true 
input: 12343534 output: false 
input: AAAA444 output: false 

附:我不知道它是否重要,但问题在于Python中的正则表达式。

回答

2

这里需要用前瞻,

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).*$ 

只匹配字母数字串。

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[A-Za-z0-9]*$ 

DEMO

(?=.*?[A-Z]) - Positive lookahead is used here which asserts that the input must contain an uppercase letter. 
(?=.*?[a-z]) - Asserts that the input contains a lowercase letter. 
(?=.*?[0-9]) - Asserts that the input contains a digit. 
+0

的''后''是多余的? - (?= * [AZ])?表达'(?= * [AZ])(= 。* [0-9])。* $'也可以。 – isedev 2014-09-25 11:21:01

+0

我测试了这个,它可以工作,但你能解释它是什么意思?)我知道^ - 开始,$ - 结束,但是什么意思?=。*? ? – Crabar 2014-09-25 11:21:21

+0

@isedev'?'有助于减少步骤。点击上面链接中的正则表达式调试器。 – 2014-09-25 11:24:50