Trong python re, bạn có thể trải dài từ alpha số đến chữ hoa. Vì thế..
import re
test = "01234ABCDEFGHIJKabcdefghijk01234abcdefghijkABCDEFGHIJK"
re.compile(r'[0-f]+').findall(test) # Bad: matches all uppercase alpha chars
## ['01234ABCDEFGHIJKabcdef', '01234abcdef', 'ABCDEFGHIJK']
re.compile(r'[0-F]+').findall(test) # Partial: does not match lowercase hex chars
## ['01234ABCDEF', '01234', 'ABCDEF']
re.compile(r'[0-F]+', re.I).findall(test) # Good
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-f]+', re.I).findall(test) # Good
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-Fa-f]+').findall(test) # Good (with uppercase-only magic)
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
re.compile(r'[0-9a-fA-F]+').findall(test) # Good (with no magic)
## ['01234ABCDEF', 'abcdef', '01234abcdef', 'ABCDEF']
Điều đó làm cho regex Python UUID đơn giản nhất:
re_uuid = re.compile("[0-F]{8}-([0-F]{4}-){3}[0-F]{12}", re.I)
Tôi sẽ để nó như một bài tập cho người đọc sử dụng thời gian để so sánh hiệu suất của những thứ này.
Thưởng thức. Giữ nó Pythonic ™!
LƯU Ý: Các nhịp đó cũng sẽ khớp với nhau :;<=>?@'
, vì vậy, nếu bạn nghi ngờ rằng có thể cung cấp cho bạn dương tính giả, đừng dùng phím tắt. (Cảm ơn Oliver Aubert đã chỉ ra điều đó trong các bình luận.)