「00000000」と等しくない、8つの記号を持つ任意の文字列に一致する正規表現を見つけようとしています。
誰でも私を助けることができますか?
ありがとう
「00000000」と等しくない、8つの記号を持つ任意の文字列に一致する正規表現を見つけようとしています。
誰でも私を助けることができますか?
ありがとう
少なくとも 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 シンボル」は、「i 番目の位置にゼロ以外のシンボルを含む 8 つのシンボル」という形式の 8 つの正規表現の合計として分解できます。そのような式を書き留めてから、代替 (「|」) を使用してそれらを 1 つに結合してみてください。
もちろん、チェックするだけです
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
より大きな文字列から「000000000」に等しくない8文字の文字列すべてを抽出する必要がある場合は、次を使用できます。
"(?=.{8})(?!0{8})."
各シーケンスの最初の文字を識別し、そのインデックスで始まる8文字を抽出します。
要件が指定されていない限り、正規表現は必要ありません。
if len(myString) == 8 and myString != "00000000":
...
(もちろん、あなたが選んだ言語で!)
([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
>>>
その仕事?