2016-10-05 119 views
0

我希望把AEM到支架,使文本看起来像:Agnico鹰矿业有限公司(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)) 

有什么不好的代码?我收到原文。

+0

你一点都没变“测试”所以它总是会打印原始字符串。当您循环并更改单词时,该更改不会自动反映到原始字符串中。 –

+0

你需要'返回'的东西... – blacksite

回答

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)) 
+0

感谢您的明确解释! – datalearner

0

这将是一个正则表达式替换非常简洁:

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

这看起来多个大写字符,一起字边界(如空格)然后用相同的文本替换匹配的组(\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)