我试图找出一个正则表达式,它匹配任何带有8个符号的字符串,不等于“00000000”。
任何人都可以帮助我吗?
感谢
答案 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
>>>
那工作?