/ / Dodaj granice wokół regex bez zmiany regex - python, regex, python-2.7, border

Dodaj granice wokół regex bez zmiany regex - python, regex, python-2.7, boundary

Próbuję wyodrębnić hashy z pliku i chcę dodać klauzulę graniczną (b) wokół regex bez bezpośredniej zmiany wyrażenia regularnego.

Na przykład, weźmy to wyrażenie regularne: ^$1$w+$w+(.)?w+..$ i już go skompilowałem: re.compile(r"^$1$w+$w+(.)?w+..$"). Teraz chcę zachować wyrażenie regularne i dodawać do niego granice bez bezpośredniej zmiany samego regex. Więc coś takiego:

def add_bound(regex_string):
return r"b{}b".format(regex_string)

Jedynym problemem, który mam z tym jest to, że moje regex są wstępnie skompilowane przed ich wykonaniem, więc zamienia je w coś takiego <_sre.SRE_Pattern object at 0x7f846a189770>. Czy istnieje sposób dodawania granic wokół już skompilowanego wyrażenia regularnego?

Odpowiedzi:

1 dla odpowiedzi № 1

Tak, możesz go zdekompilować, dodać granice, a następnie przekompilować.

import regex as re

def add_bound(regex_obj):
new_regex_string = r"b" + regex_obj.pattern + r"b"
new_regex_obj = re.compile(new_regex_string)
return new_regex_obj


# example usage
some_text = """
ahello worlda
hello world
"""
regex_obj = re.compile(r"hello world")

print re.findall(add_bound(regex_obj),some_text)

Powyższa funkcja służy do objaśnienia / ilustracji, która powinna być użyta w kodzie:

import regex as re
def add_bound(regex_obj):
return re.compile(r"b" + regex_obj.pattern + r"b")

użyłem Jak dekompilować wyrażenie regularne? aby rozwinąć tę odpowiedź

Nie jestem pewien, dlaczego Twój przykładowy regex (^$1$w+$w+(.)?w+..$) zaczyna się i kończy kotwicami (^ i $), ponieważ w zasadzie zastąpią one dodawanie granic (b).