Tôi đang tìm kiếm để khớp với số có 15 chữ số (như một phần của chuỗi regex lớn hơn). Ngay bây giờ, tôi cóRegex để khớp các chữ số có độ dài cụ thể
\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d
nhưng tôi cảm thấy cần phải có cách làm sạch hơn.
Tôi đang tìm kiếm để khớp với số có 15 chữ số (như một phần của chuỗi regex lớn hơn). Ngay bây giờ, tôi cóRegex để khớp các chữ số có độ dài cụ thể
\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d
nhưng tôi cảm thấy cần phải có cách làm sạch hơn.
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.
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.
Nevermind, tôi thử nghiệm sai – MrGlass
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
Vâng, đó là vấn đề của tôi - tôi quên để neo thử nghiệm của tôi. – MrGlass
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 sử dụng trong thư viện regex python. – MrGlass
Điều này sẽ hoạt động, sau đó. –