2017-02-22 9 views
1

正しい形式のバージョン番号を含む入力文字列をチェックしようとしています。 Xは、数値の桁の任意の数、例えばすることができバージョン番号(vX.X.X)の正規表現が機能しない

vX.X.X 

v([\d.][\d.])([\d]) 

これは動作しません:

v1.32.12 or v0.2.2 or v1232.321.23 

私は、次の正規表現を持っています。

ここで私のエラー

編集:私はまた、20文字の最大長さを持つように文字列を必要とし、正規表現を介してこれを行う方法があるか、それだけで通常のPythonのlenを使用するのが最適です()

+0

あなたは全体の文字列の長さを意味しますか? –

+0

@AvinashRajはい、文字列は 'version'変数に格納されます。 'version =" v0.2.1 "'この変数の合計長が<20文字であることを確認したいと思います。 – Sithling

+1

長さを確認するにはhttps://regex101.com/r/tMBYzL/1 –

答えて

5

[\d.]が一致しなければならないこと任意の1文字は、数字またはドットのいずれかです。

v(\d+)\.(\d+)\.\d+ 

\d+を使用して、1文字以上の数字を一致させてください。

例:一致前に文字列の長さの開始チェックで

>>> import re 
>>> s = ['v1.32.12', 'v0.2.2' , 'v1232.321.23', 'v1.2.434312543898765'] 
>>> [i for i in s if re.match(r'^(?!.{20})v(\d+)\.(\d+)\.\d+$', i)] 
['v1.32.12', 'v0.2.2', 'v1232.321.23'] 
>>> 

(?!.{20})負先読み。文字列の長さが少なくとも20ならば、その特定の文字列に一致することなくすぐに失敗します。

+0

ありがとう、これは動作します! – Sithling

+1

それがあなたのために働くなら、あなたの質問 – radicarl

+1

の回答としてこの答えを受け入れる@radicarl完了、15分の制限を受けました。^_^ – Sithling

0

@Avinash Raj.Avinash Raj。あなたの回答は一修正を除いて完全です。 これは19文字だけです。明るい補正

>>> import re 
>>> s = ['v1.32.12', 'v0.2.2' , 'v1232.321.23', 'v1.2.434312543898765'] 
>>> [i for i in s if re.match(r'^(?!.{21})v(\d+)\.(\d+)\.\d+$', i)] 
['v1.32.12', 'v0.2.2', 'v1232.321.23'] 
>>> 
+0

このhttp://stackoverflow.com/questions/42390661/regular-expression-for-version-number-vx-x-x-not-working/42390685#comment71929048_42390661のコメントを参照してください。それは20未満でなければなりません。 –