2010-08-13 4 views
8

주어진 정규식, 무언가를 테스트하는 무작위 데이터 x 시간을 생성하고 싶습니다.정규 표현식에 따라 데이터를 생성하는 lib가 있습니까? (Python 또는 기타)

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

물론 목표는 전화 번호 및 이메일 주소와 같은 것보다 조금 더 복잡한 작업을하는 것입니다.

이와 비슷한 것이 있습니까? 그렇다면 파이썬을 위해서 존재합니까? 그렇지 않다면, 내가 할 수있는 단서/이론은 없습니까?

답변

7

대한 파싱 간단한 정규 표현식에 대한 모든 순열의 발전기를 돌려 this regex inverter가 포함되어 있습니다. 여기에 해당 모듈의 테스트 케이스의 일부는 다음과 같습니다

[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) 

편집 :

는 (! 번) 당신의 순열의 목록을 작성, 당신의 무작위 선택을 한 다음 목록에 random.choice를 호출하려면 정규식과 일치하는 임의의 문자열이 필요할 때마다 다음과 같이 (테스트되지 않음)

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 정말 대단합니다! – katrielalex

+0

거의 무엇을 찾고 있습니다. +1 –

+0

또한이 모듈을 UtilityMill의 유틸리티로 패키징했습니다 : http://utilitymill.com/utility/Regex_inverter. 모든 UM 유틸리티는 XML 및 JSON API를 노출하므로 코드에서 원격으로 호출 할 수 있으며 UtilityMill은 정규식 반전 처리를 수행합니다. – PaulMcG

2

There is a post 정규식의 모든 순열을 생성하는 모듈에 대한 파이썬 메일 목록입니다. 나는 당신이 어떻게 그것을 무작위로 생각할지 모르겠다. 나는 계속 점검 할 것이다.

+0

+1을 검색합니다. –

+0

@ e-satis - 사실 어딘가에있는 다른 곳에서 실제로 발견되었습니다. – detly

1

필자는이 문제를 제안한 것으로 추측되지만 펄은 정확하게 이것을 수행하는 모듈을 가지고 있습니다. 당신은 파이썬에서 그것을 구현하는 방법의 코드를 살펴 할 수 있습니다 :

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

+0

아직 [채찍] 버튼이 없으므로 안전합니다. – detly

+0

적어도 펄에 대해서는 흥미 롭다. +1 –

관련 문제