2010-08-13 19 views
8

Với regexp, tôi muốn tạo dữ liệu ngẫu nhiên x số lần để kiểm tra điều gì đó.Có lib để tạo dữ liệu theo regexp không? (Python hoặc khác)

ví dụ:

>>> print generate_date('\d{2,3}') 
13 
>>> print generate_date('\d{2,3}') 
422 

Tất nhiên mục tiêu là làm điều gì đó phức tạp hơn một chút so với số điện thoại và địa chỉ email.

Có điều gì như thế này không? Nếu có, nó có tồn tại cho Python không? Nếu không, bất kỳ đầu mối/lý thuyết tôi có thể sử dụng để làm điều đó?

Trả lời

7

Pyparsing bao gồm this regex inverter, mà trả về một máy phát điện của tất cả các hoán vị cho regexes đơn giản. Dưới đây là một số các trường hợp thử nghiệm từ mô-đun:

[A-C]{2}\d{2} 
@|TH[12] 
@(@|TH[12])? 
@(@|TH[12]|AL[12]|SP[123]|TB(1[0-9]?|20?|[3-9]))? 
@(@|TH[12]|AL[12]|SP[123]|TB(1[0-9]?|20?|[3-9])|OH(1[0-9]?|2[0-9]?|30?|[4-9]))? 
(([ECMP]|HA|AK)[SD]|HS)T 
[A-CV]{2} 
A[cglmrstu]|B[aehikr]?|C[adeflmorsu]?|D[bsy]|E[rsu]|F[emr]?|G[ade]|H[efgos]?|I[nr]?|Kr?|L[airu]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]|S[bcegimnr]?|T[abcehilm]|Uu[bhopqst]|U|V|W|Xe|Yb?|Z[nr] 
(a|b)|(x|y) 

Edit:

Để làm được lựa chọn ngẫu nhiên của bạn, tạo ra một danh sách (một lần!) Hoán vị của bạn, và sau đó gọi random.choice trong danh sách mỗi lần bạn muốn một chuỗi ngẫu nhiên khớp với regex, một cái gì đó như thế này (chưa được kiểm tra):

class RandomString(object): 
    def __init__(self, regex): 
     self.possible_strings = list(invRegex.invert(regex)) 
    def random_string(self): 
     return random.choice(self.possible_strings) 
+0

+1 Thật tuyệt vời! – katrielalex

+0

Hầu hết những gì tôi đang tìm kiếm. +1 –

+0

Tôi cũng đã đóng gói mô-đun này làm tiện ích trên UtilityMill: http://utilitymill.com/utility/Regex_inverter. Tất cả các tiện ích UM hiển thị XML và JSON API, vì vậy bạn có thể gọi điều này từ xa từ mã của riêng bạn và UtilityMill thực hiện xử lý đảo ngược regex. – PaulMcG

2

There is a post trên danh sách gửi thư của Python về mô-đun tạo tất cả hoán vị của một regex. Tôi không chắc chắn làm thế nào bạn có thể đi về ngẫu nhiên nó mặc dù. Tôi sẽ tiếp tục kiểm tra.

+0

1 khiến bạn tìm kiếm nó. –

+0

@ e-satis - Tôi thực sự tìm thấy nó ở một nơi khác trên SO :) – detly

1

Tôi có thể sẽ bị tắt vì gợi ý điều này, nhưng perl có một mô-đun thực hiện chính xác điều này. Bạn có thể muốn có một cái nhìn vào mã làm thế nào để thực hiện nó trong python:

http://p3rl.org/String::Random

+0

SO chưa có nút [whip], vì vậy bạn an toàn. – detly

+0

Thú vị khi biết nó tồn tại, ít nhất là cho perl. +1 –

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