我试图找出一个正则表达式,它匹配任何带有 8 个符号的字符串,它不等于“00000000”。
谁能帮我?
谢谢
至少在 perl regexp 中使用否定的前瞻断言:^(?!0{8}).{8}$
,但我个人宁愿这样写:
length $_ == 8 and $_ ne '00000000'
另请注意,如果您确实使用了正则表达式,则根据您的语言,您可能需要一个标志来使点匹配换行符,如果您愿意的话。在 perl 中,这就是/s
“单行模式”的标志。
除非您由于某种原因被迫进入它,否则这不是正则表达式问题。只需使用len(s) == 8 && s != "00000000"
或任何您的语言用来比较字符串和长度。
如果你需要一个正则表达式,^(?!0{8})[A-Za-z0-9]{8}$
将匹配一个正好 8 个字符的字符串。更改 [] 内的值将允许您设置接受的字符。
如其他答案所述,正则表达式不是此任务的正确工具。我怀疑这是一个家庭作业,因此我只会暗示一个解决方案,而不是明确说明它。
正则表达式“除 00000000 之外的任何 8 个符号”可以分解为 8 个正则表达式的总和,形式为“第 i 个位置上具有非零符号的 8 个符号”。尝试写下这样的表达式,然后使用替代(“|”)将它们组合成一个。
除非您有未指定的要求,否则您实际上不需要正则表达式:
if len(myString) == 8 and myString != "00000000":
...
(当然是您选择的语言!)
如果您需要从较大的字符串中提取所有不等于“000000000”的八个字符串,您可以使用
"(?=.{8})(?!0{8})."
识别每个序列的第一个字符并从其索引开始提取八个字符。
当然,人们会简单地检查
if stuff != '00000000'
...
但是为了记录,人们可以很容易地为此使用重量级的正则表达式(在 Perl 中);-)
...
use re 'eval';
my @strings = qw'00000000 00A00000 10000000 000000001 010000';
my $L = 8;
print map "$_ - ok\n",
grep /^(.{$L})$(??{$^Nne'0'x$L?'':'^$'})/,
@strings;
...
印刷
00A00000 - ok
10000000 - ok
去搞清楚 ;-)
问候
rbo
([1-9]**|\D*){8} 不会这样做吗?还是我在这里遗漏了一些东西(这实际上只是 ndim 的倒数,这似乎应该有效)。
我假设选择的字符包含的不仅仅是数字。
好吧,那是错误的,所以博洛教授我得到了及格分数吗?(我喜欢 reg 表达式,所以我真的很好奇)。
>>> if re.match(r"(?:[^0]{8}?|[^0]{7}?|[^0]{6}?|[^0]{5}?|[^0]{4}?|[^0]{3}?|[^0]2}?|[^0]{1}?)", '00000000'):
print 'match'
...
>>> if re.match(r"(?:[^0]{8}?|[^0]{7}?|[^0]{6}?|[^0]{5}?|[^0]{4}?|[^0]{3}?|[^0]{2}?|[^0]{1}?)", '10000000'):
... print 'match'
match
>>> if re.match(r"(?:[^0]{8}?|[^0]{7}?|[^0]{6}?|[^0]{5}?|[^0]{4}?|[^0]{3}?|[^0]{2}?|[^0]{1}?)", '10011100'):
... print 'match'
match
>>>
那个工作?