我们希望使用正则表达式验证以下内容:
例如:
%sample1%_%sample2%
有效
%sample2%%sample1%
有效
1_abc
有效
%sampleee1%
无效
%sample2%%sample1%_%sample1%_%sample1%
有效
我们试过这个:
^(%sample1%)*[a-zA-Z0-9_]*(%sample2%)*$
但不符合以下条件:
%sample2%%sample1%
在这种情况下,regex
应该是什么。
答案 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] ) $