2011-01-28 25 views

Trả lời

21

Nếu ngôn ngữ regex của bạn tương thích với Perl: \d{15}.

Thật khó để nói cách xử lý các cạnh (vì vậy bạn không vô tình lấy thêm chữ số) mà không biết ngữ cảnh bên ngoài mà đoạn mã này sẽ được sử dụng. Các giải pháp bối cảnh độc lập dứt khoát là thế này:

(?:(?<!\d)\d{15}(?!\d)) 

Bạn có thể đặt này ở giữa bất kỳ regex và nó sẽ phù hợp (và duy nhất trận đấu) một chuỗi chính xác 15 chữ số. Đó là, tuy nhiên, khá vụng về, và thường không cần thiết. Một phiên bản đơn giản, cho rằng ranh giới phi tự chữ và số (ví dụ, khoảng trắng xung quanh các chữ số) là thế này:

(?:\b\d{15}\b) 

Nhưng nó sẽ không hoạt động nếu các chữ cái ngay trước hoặc sau chuỗi.

Trong cả hai trường hợp trên, bên ngoài (?: ... ) chỉ là cấu trúc khung để tránh các vấn đề ưu tiên với regex xung quanh. Cho dù nó là cần thiết cũng phụ thuộc vào bối cảnh.

+0

Được sử dụng trong thư viện regex python. – MrGlass

+0

Điều này sẽ hoạt động, sau đó. –

27

Bạn thường có thể làm dao động như sau:

\d{4,7} 

có nghĩa là tối thiểu là 4 và tối đa là 7 chữ số. Đối với trường hợp cụ thể của bạn, bạn có thể sử dụng biến thể một đối số, \d{15}.

Cả hai biểu mẫu này đều được hỗ trợ trong Python's regular expressions - tìm kiếm văn bản {m,n} tại liên kết đó.

Và hãy nhớ rằng \d{15} sẽ khớp với mười lăm chữ số ở bất kỳ đâu trong dòng, bao gồm số có 400 chữ số. Nếu bạn muốn đảm bảo nó chỉ có mười lăm tuổi, bạn sử dụng một cái gì đó như:

^\d{15}$ 

trong đó sử dụng khi bắt đầu và kết thúc neo, hoặc

^\D*\d{15}\D*$ 

cho phép tùy ý phi chữ số ở hai bên.

+0

Nevermind, tôi thử nghiệm sai – MrGlass

+2

Nếu bạn wanr chính xác 15, bạn sẽ cần phải neo: tìm kiếm '^ \ d {15} $' ví dụ, đảm bảo không có gì ở hai bên - nó sẽ chỉ chấp nhận một chuỗi chính xác 15 ký tự dài với tất cả các ký tự là chữ số. – paxdiablo

+0

Vâng, đó là vấn đề của tôi - tôi quên để neo thử nghiệm của tôi. – MrGlass

0

Có hai cách để hạn chế số.

sử dụng len,

num = 1234 
len(str(num)) <= 4 

Kết quả này sẽ được True/False.

sử dụng biểu thức chính quy,

import re 
num = 12324 
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num)) 

Đầu ra sẽ là đối tượng biểu thức chính quy hoặc Không.

Các vấn đề liên quan