Подстановочный знак с циклическим повторением - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь улучшить соответствующее выражение этого кода, чтобы оно совпадало с пробелами до или после строки, а также игнорировало регистр.Цель состоит в том, чтобы вывести сокращенное сокращенное состояние.

import re
s = "new South Wales "
for r in (("New South Wales", "NSW"), ("Victoria", "VIC"), ("Queensland", "QLD"), ("South Australia", "SA"), ("Western Australia", "WA"), ("Northern Territory", "NT"), ("Tasmania", "TAS"), ("Australian Capital Territory", "ACT")):
    s = s.replace(*r)
    output = {'state': s}
    print (output)

Я нашел регулярное выражение для этого (см. здесь ):

(?i)(?<!\S)New South Wales(?!\S)

, которыйбудет совпадать с пробелами по обе стороны строки или без них, а также игнорирует регистр.Может ли кто-нибудь помочь мне обновить мой оригинальный код, чтобы включить новое регулярное выражение?

1 Ответ

0 голосов
/ 08 февраля 2019

На вашем месте я бы просто удалил () строку перед тем, как передать ее, и использовал бы что-то вроде re.sub () , где мы можем сказать, что он игнорирует регистр, используя ' flags =re.IGNORECASE 'как показано ниже.

import re

s = "  new South Wales ".strip()
for r in (("New South Wales", "NSW"), ("Victoria", "VIC"), ("Queensland", "QLD"), ("South Australia", "SA"), ("Western Australia", "WA"), ("Northern Territory", "NT"), ("Tasmania", "TAS"), ("Australian Capital Territory", "ACT")):
    _regex = '{0}|{1}'.format(r[0], r[1])
    if re.match(_regex, s, flags=re.IGNORECASE):
        subbed_string = re.sub(r[0], r[1], s, flags=re.IGNORECASE)
        print({'state': subbed_string.upper()})

Кроме того, я добавил в проверку на совпадение, прежде чем пытаться подставить в значение.В противном случае вы можете вывести неверный результат.Например:

(('Тасмания', 'TAS') {'штат': 'Новый Южный Уэльс'})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...