Я хочу заключить тикеры в квадратные скобки

#python

#питон #python

Вопрос:

Я хочу заключить AEM в квадратные скобки, чтобы текст выглядел следующим образом: Agnico Eagle Mines Limited (AEM)

 text = "Agnico Eagle Mines Limited AEM"
def add_brackets(test):
     for word in test:
         if word.isupper():
             word = "("   word   ")"
     print(test)

print(add_brackets(text))
  

Что не так с кодом? Я получаю исходный текст.

Комментарии:

1. Вы не изменили ‘test’, поэтому он всегда будет печатать исходную строку. Когда вы перебираете и изменяете word, это изменение автоматически не отражается в исходной строке.

2. Вам нужно return что-то…

Ответ №1:

Две вещи: 1 вы проверяете каждый символ, а не каждое слово. 2 вы не изменяете text , вы просто устанавливаете word и ничего с этим не делаете.

 text = "Agnico Eagle Mines Limited AEM"


def add_brackets(test):
    outstr = ""
    for word in test.split(" "):
        if word.isupper():
            outstr  = " ("   word   ")"
        else:
            outstr  = " "   word
    return outstr.strip()


print(add_brackets(text))
  

Редактировать: Любитель

 text = "Agnico Eagle Mines Limited AEM"


def add_brackets(test):
    return " ".join(["({})".format(word) if word.isupper() else word for word in test.split(" ")])

print(add_brackets(text))
  

Ответ №2:

Это было бы довольно лаконично с заменой регулярного выражения:

 >>> import re
>>> text = "Agnico Eagle Mines Limited AEM"
>>> re.sub(r'b([A-Z] )b', r'(1)', text)
'Agnico Eagle Mines Limited (AEM)'
  

Это ищет несколько символов верхнего регистра вместе, с границами слов (например, пробелами) с обеих сторон, затем заменяет эту соответствующую группу тем же текстом (the 1 ) с добавлением круглых скобок.

В функции:

 >>> import re
>>> def add_brackets(s):
...     return re.sub(r'b([A-Z] )b', r'(1)', s)
...
>>> print(add_brackets(text))
Agnico Eagle Mines Limited (AEM)