正则表达式匹配除“00000000”之外的所有8个字符串

时间:2010-04-22 11:48:34

标签: regex regex-negation

我试图找出一个正则表达式,它匹配任何带有8个符号的字符串,不等于“00000000”。

任何人都可以帮助我吗?

感谢

8 个答案:

答案 0 :(得分:12)

至少使用负前瞻断言perl regexp:^(?!0{8}).{8}$,但我个人更喜欢这样写:

length $_ == 8 and $_ ne '00000000'

另请注意,如果您使用正则表达式,根据语言的不同,您可能需要一个标记来使点匹配换行符,如果您需要。在perl中,这是/s标志,用于“单行模式”。

答案 1 :(得分:8)

除非您因某种原因被迫加入,否则这不是正则表达式问题。只需使用len(s) == 8 && s != "00000000"或您使用的语言来比较字符串和长度。

答案 2 :(得分:2)

如果您需要正则表达式,^(?!0{8})[A-Za-z0-9]{8}$将匹配正好为8个字符的字符串。更改[]内的值将允许您设置接受的字符。

答案 3 :(得分:1)

正如其他答案所述,正则表达式不适合此任务。我怀疑这是一个家庭作业,因此我只会提示一个解决方案,而不是明确说明。

正则表达式“除了00000000之外的任何8个符号”可以被分解为八个正则表达式的总和,其形式为“在第i个位置具有非零符号的8个符号”。尝试写下这样的表达式,然后使用替代(“|”)将它们组合成一个。

答案 4 :(得分:0)

除非您有未指定的要求,否则您实际上不需要正则表达式:

if len(myString) == 8 and myString != "00000000":
    ...

(当然是用您选择的语言!)

答案 5 :(得分:0)

如果您需要从较大的字符串中提取所有八个不等于“000000000”的字符串,可以使用

"(?=.{8})(?!0{8})."

识别每个序列的第一个字符,并从索引开始提取八个字符。

答案 6 :(得分:0)

当然,人们只需检查

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

答案 7 :(得分:-1)

不会([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
>>> 

那工作?