diff --git a/README.md b/README.md index bc7e1cd..81a83d8 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,16 @@ a{__b__|{c|}|{__d__|e|}|f|}g____ __my__ - to aeg __quality_my__, __breasts__, { |__character_dress__|__dress_my__}, __shoulder__, {high heels,| } {choker,| } {,| } NSFW, __NSFW_my__, { |__style_my__,} +``` +ex : {3$$a1|{b2|c3|}|d4|{-$$|f|g}|{-2$$h||i}|{1-$$j|k|}}/{$$l|m|}/{0$$n|} +{1|2|3} -> 1 or 2 or 3 +{2$$a|b|c} -> a,b or b,c or c,a or bb or .... +{9$$a|b|c} -> {3$$a|b|c} auto fix max count +{1-2$$a|b|c} -> 1~2 random choise +{-2$$a|b|c} -> {0-2$$a|b|c} 0-2 +{1-$$a|b|c} -> {0-3$$a|b|c} 1-max +{-$$a|b|c} -> {0-3$$a|b|c} 0-max +``` ### run sample diff --git a/wildcards.py b/wildcards.py index 1e327e5..5af25ce 100644 --- a/wildcards.py +++ b/wildcards.py @@ -30,23 +30,77 @@ card_path=os.path.dirname(__file__)+"\\..\\..\\wildcards\\**\\*.txt" print(f"wildcards card_path {card_path}") # 정규식 -resub = re.compile(r"(\{)([^\{\}]*)(\})") +#resub = re.compile(r"(\{)([^\{\}]*)(\})") +resub = re.compile(r"(\{)(((\d+)|(\d+)?-(\d+)?)?\$\$)?([^\{\}]*)(\})") recard = re.compile(r"(__)(.*?)(__)") # 카드 목록 cards = {} +seperator=", " +loop_max=50 # | 로 입력된것중 하나 가져오기 def sub(match): - m=match.group(2).split("|") - #print(f"sub : {m}") - return random.choice(m) + #print(f"sub : {(match.groups())}") + try: + #m=match.group(2) + s=match.group(3) + m=match.group(7).split("|") + + #print(f"m : {m}") + if s is None: + return random.choice(m) + c=len(m) + n=int(match.group(4)) if match.group(4) else None + if n: + + r=seperator.join(random.sample(m,min(n,c))) + #print(f"n : {n} ; {r}") + return r + + n1=match.group(5) + n2=match.group(6) + + if n1 or n2: + a=min(int(n1 if n1 else c), int(n2 if n2 else c),c) + b=min(max(int(n1 if n1 else 0), int(n2 if n2 else 0)),c) + #print(f"ab : {a} ; {b}") + r=seperator.join( + random.sample( + m, + random.randint( + a,b + ) + ) + ) + #n1=int(match.group(5)) if not match.group(5) is None + #n2=int(match.group(6)) if not match.group(6) is None + else: + r=seperator.join( + random.sample( + m, + random.randint( + 0,c + ) + ) + ) + #print(f"12 : {r}") + return r + + + except Exception as e: + print(f"Error : {match.groups()}") + print(f"Exception : {e}") + return "" + + # | 로 입력된것중 하나 가져오기 반복 def sub_loop(text): bak=text - for i in range(1, 50): + for i in range(1, loop_max): tmp=resub.sub(sub, bak) + #print(f"tmp : {tmp}") if bak==tmp : return tmp bak=tmp @@ -66,7 +120,7 @@ def card(match): # 카드 중에서 가져오기 반복. | 의 것도 처리 def card_loop(text): bak=text - for i in range(1, 50): + for i in range(1, loop_max): tmp=recard.sub(card, bak) #print(f"card l : {bak}") if bak==tmp : @@ -117,10 +171,11 @@ def run(text): # ============================================================ -# 테스트용 -test="__my__" - #m = p.sub(sub, test) #print(m) - -run(test) +#print(__name__) +if __name__ == '__main__' : + # 테스트용 + test="{3$$a1|{b2|c3|}|d4|{-$$|f|g}|{-2$$h||i}|{1-$$j|k|}}/{$$l|m|}/{0$$n|}" + print(run(test)) + print(run("{9$$a|b}"))