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