上一节我们学习了str.lower()
,它可以将所有字母都转为小写。今天我们来认识它的“兄弟”函数——str.upper()
。
它的功能正好相反:无论原始文本长什么样,它都会把所有字母强行转换成大写。这两个函数共同构成了我们处理文本大小写问题的“标准化”工具箱。虽然在做不区分大小写的比较时,我们通常习惯于统一转成小写,但有时为了显示统一、或者匹配某些固定为大写的规则,str.upper()
同样不可或缺。
str.upper()
函数
它的用法和str.lower()
完全一样,只是功能相反:str.upper(你要转换的字符串)
。
函数会返回以下三种可能的结果之一:
- 一个全新的、所有字母都转换为大写的新字符串 。例如,
str.upper("Sell 10 oil CFDs")
会返回"SELL 10 OIL CFDS"
。 - 一个与原始字符串完全相同的字符串。这种情况发生在原始字符串里不包含任何字母字符时 。例如,
str.upper("84.239")
将简单地返回"84.239"
。 - 一个空字符串(
""
)。这在两种情况下会发生:当你传入一个空字符串,或者传入了na
值时 。
我们来看一个快速示例。假设我们想将交易品种的描述转换为大写文本:
// 将描述转换大写字母
descUpper = str.upper(syminfo.description)
这里我们使用syminfo.description
变量调用了str.upper()
函数 。函数返回的大写文本结果会被存储在descUpper
变量中 。有了这个变量,我们就可以进行多种操作,比如在图表上创建一个标签来显示它的值 :
// 创建一个显示大写描述的标签
if barstate.islast
label.new(bar_index, high, "Description: " + descUpper,
color=color.black, textcolor=color.white)
str.upper()
函数的核心工作就是将文本转换为大写,但它的实用性远不止于此 。
- 和
str.lower()
一样,它最重要的用途是作为“预处理”工具,实现不区分大小写的比较。在比较两个字符串之前,先用str.upper()
将它们都转换为相同的大写形式,就可以消除大小写差异,让比较只关注内容本身 。 - 它可以与其他字符串函数协同工作。例如,当
str.substring()
函数从一个较长的字符串中截取出一个子字符串时,str.upper()
可以接着只将这个截取出来的子字符串转换为大写,而保持字符串的其余部分不变 。 - 另外,还可以检查整个字符串是否已经是大写形式。要做到这一点,我们可以将原始字符串与
str.upper()
函数对该字符串进行处理后的结果进行比较。如果两者完全相同,那么就说明原始字符串本身就已经是大写形式了 。
实战案例
下面的指标展示了如何用str.upper()
来清理美股名称中常见的公司后缀,比如“, Inc.”。为了能准确地移除各种大小写形式(如‘Inc’、‘inc’或‘INC’),脚本首先使用str.upper()
将描述文本标准化为全大写,然后再进行替换操作 。
//@version=6
indicator(title="字符串转大写 - 案例", overlay=true)
// 1. 先用转为大写,在用 str.replace() 查找并移除 ", INC."
descCleaned = str.replace(str.upper(syminfo.description), ", INC.", "")
// 2. 对比结果
if barstate.islastconfirmedhistory
label.new(bar_index + 3, hl2, style=label.style_label_left,
color=color.navy, textcolor=color.white,
text="原始描述:\n" + syminfo.description +
"\n\n清洗并转为大写后:\n" + descCleaned)
这段代码的核心在于str.replace(str.upper(syminfo.description), ", INC.", "")
这一行 。程序会先执行最里面的str.upper()
,把描述文本“标准化”成全大写 。然后再用str.replace()
在标准化的文本里,精确地查找并替换掉大写的", INC."
。
如果原始描述中不包含该短语,那么descCleaned
变量将仅仅包含原始描述的大写形式 。在图表上,这个标签会显示交易品种的描述,其中不包含“,Inc.”。对于那些描述中不含这个子字符串的交易品种,唯一的改变就是整个描述会以大写文本显示 。
总结
总结一下,str.upper()
是str.lower()
的功能镜像,是你文本处理工具箱里另一个重要的标准化工具。
- 它通过将所有字母统一为大写,为后续的文本操作扫清了大小写不一致的障碍。
- 它只需要一个参数:你希望转换为大写的字符串 。
- 它返回的是一个全新的字符串副本,不会改变原始字符串的值 。
str.upper()
函数返回的大写字符串,是我们传入的原始字符串的一个副本。这意味着,原始字符串本身并不会被这个函数修改 。