用于验证字符串中的文字和字母数字字符的正则表达式

时间:2014-05-21 14:37:20

标签: regex validation

我们希望使用正则表达式验证以下内容:

  1. 字符串可能包含0个或多个字母,数字,下划线OR
  2. 字符串可能包含文字%sample1%或%sample2%(按任意顺序0次或更多次)
  3. 例如:
    %sample1%_%sample2%有效 %sample2%%sample1%有效 1_abc有效 %sampleee1%无效 %sample2%%sample1%_%sample1%_%sample1%有效

    我们试过这个:

    ^(%sample1%)*[a-zA-Z0-9_]*(%sample2%)*$

    但不符合以下条件:

    %sample2%%sample1%

    在这种情况下,regex应该是什么。

3 个答案:

答案 0 :(得分:1)

这个正则表达式做你想要的:

^(%sample1%|%sample2%|[a-zA-Z0-9_])*$

请参阅live demo

请注意,这可以缩短为:

^(%sample[12]%|\w)*$

虽然您可能不想合并“示例”字词,但正则表达式\w[a-zA-Z0-9_]相同(如果您只期望拉丁字符,\w包含字母和数字来自多种语言)。

答案 1 :(得分:0)

只需按照您描述的方式将其分解为代码:

txt='''\
%sample1%_%sample2% is valid 
%sample2%%sample1% is valid 
1_abc is valid 
%sampleee1% is not valid 
%sample2%%sample1%%sample1%%sample1% is valid'''

import re

for line in txt.splitlines():
    print line.split(' ', 1)
    if re.search(r'_', line) and re.search(r'\d', line) and re.search(r'[a-zA-Z]', line):
        print 'valid #1'
    elif re.search(r'%sample\d+%', line):
        print 'valid #2'
    else:
        print 'not valid'  

打印:

['%sample1%_%sample2%', 'is valid ']
valid #1
['%sample2%%sample1%', 'is valid ']
valid #2
['1_abc', 'is valid ']
valid #1
['%sampleee1%', 'is not valid ']
not valid
['%sample2%%sample1%%sample1%%sample1%', 'is valid']
valid #2

答案 2 :(得分:0)

这也将解决您的问题: ^((%SAMPLE1%)的(%SAMPLE2%) [A-ZA-Z0-9] $