主要内容

比较文本

MATLAB® 提供多种方法来比较字符串数组和字符向量中的文本。例如,您可以使用关系运算符、matches 函数或 strcmp 函数。您可以使用 sort 函数对字符串数组进行排序,就像对任何其他数组类型一样。您也可以检查文本片段中的字符,例如,确定字符向量或字符串数组中的哪些字符为字母或空格字符。

比较字符串数组是否相等

您可以使用关系运算符 ==~= 来比较字符串数组是否相等。这些运算符执行区分大小写的比较,并返回一个逻辑数组;如果关系为 true,则该逻辑数组包含 1;如果关系不为 true,则包含 0

例如,创建两个字符串标量。您可以使用双引号创建字符串。

str1 = "Hello"
str1 = 
"Hello"
str2 = "World"
str2 = 
"World"

比较 str1str2 是否相等。

str1 == str2
ans = logical
   0

将一个包含多个元素的字符串数组与一个字符串标量进行比较。

str1 = ["Mercury","Gemini","Apollo"; ...
        "Skylab","Skylab B","International Space Station"];
str2 = "Apollo";
str1 == str2
ans = 2×3 logical array

   0   0   1
   0   0   0

将一个字符串数组与一个字符向量进行比较。只要其中一个变量为字符串数组,您就可以使用关系运算符进行比较。

chr = 'Gemini';
TF = (str1 == chr)
TF = 2×3 logical array

   0   1   0
   0   0   0

您可以使用逻辑数组对某个数组进行索引。例如,使用 TFstr1 进行索引以提取与 'Gemini' 匹配的字符串元素。

str1(TF)
ans = 
"Gemini"

使用 ~= 运算符进行不相等比较。

TF = (str1 ~= chr)
TF = 2×3 logical array

   1   0   1
   1   1   1

str1 进行索引以提取与 'Gemini' 不匹配的元素。

str1(TF)
ans = 5×1 string
    "Mercury"
    "Skylab"
    "Skylab B"
    "Apollo"
    "International Space Station"

比较两个非标量字符串数组。当您使用关系运算符比较两个非标量字符串数组时,数组的大小必须相同。

str2 = ["Mercury","Mars","Apollo"; ...
        "Jupiter","Saturn","Neptune"];
TF = (str1 == str2)
TF = 2×3 logical array

   1   0   1
   0   0   0

str1 进行索引以提取相等的元素。

str1(TF)
ans = 2×1 string
    "Mercury"
    "Apollo"

比较字符串数组是否匹配

您也可以使用 matches 函数比较字符串数组。例如:

matches("Hello","World")
ans = logical
   0

matches(["Mercury","Gemini","Apollo"],"Apollo")
ans = 1×3 logical array

   0   0   1

比较两个非标量字符串数组时,matches 会将第一个数组的每个元素与第二个数组的所有元素进行比较。因此,matches 不要求两个非标量数组具有相同的大小。

例如,比较两个不同大小的非标量数组。matches 函数查找匹配 "Apollo""Mercury"str1 元素。

str1 = ["Mercury","Gemini","Apollo"; ...
    "Skylab","Skylab B","International Space Station"];
str2 = ["Apollo" "Mercury"];
matches(str1,str2)
ans = 2×3 logical array

   1   0   1
   0   0   0

您也可以使用 matches 将字符串数组与某个模式匹配。例如,查找 str1 中仅包含字母的字符串元素。

pat = lettersPattern;
matches(str1,pat)
ans = 2×3 logical array

   1   1   1
   1   0   0

matches 函数也支持字符向量和字符向量元胞数组。

使用其他关系运算符比较字符串数组

您也可以使用关系运算符 >>=<<= 来比较字符串。以大写字母开头的字符串位于以小写字母开头的字符串前面。例如,字符串 "ABC" 小于 "abc"。数字和某些标点符号也位于字母前面。

"ABC" < "abc"
ans = logical
   1

使用 > 运算符将一个包含名字的字符串数组与另一个名字进行比较。名字 Sanchezde PonteNash 位于 Matthews 后面,因为 SdN 都大于 M

str = ["Sanchez","Jones","de Ponte","Crosby","Nash"]; 
TF = (str > "Matthews")
TF = 1×5 logical array

   1   0   1   0   1

str(TF)
ans = 1×3 string
    "Sanchez"    "de Ponte"    "Nash"

对字符串数组排序

您可以对字符串数组进行排序。MATLAB® 使用 UTF-16 字符编码方案以 Unicode® 方式存储字符。字符和字符串数组按 UTF-16 码点顺序进行排序。对于同时也是 ASCII 字符的字符,此顺序意味着大写字母在小写字母之前。数字和某些标点符号也在字母之前。

对字符串数组 str 进行排序。

sort(str)
ans = 1×5 string
    "Crosby"    "Jones"    "Nash"    "Sanchez"    "de Ponte"

对一个 2×3 字符串数组进行排序。sort 函数会单独对每列中的元素进行排序。

sort(str1)
ans = 2×3 string
    "Mercury"    "Gemini"      "Apollo"                     
    "Skylab"     "Skylab B"    "International Space Station"

要对每行中的元素进行排序,请沿第二个维度对 str1 进行排序。

sort(str1,2)
ans = 2×3 string
    "Apollo"                         "Gemini"    "Mercury" 
    "International Space Station"    "Skylab"    "Skylab B"

比较字符向量

您可以使用 strcmp 函数比较字符向量和字符向量元胞数组。您可以使用 startsWith 函数来确定字符向量是否以特定模式开头。

例如,比较两个字符向量:

chr1 = 'hello';
chr2 = 'he';
TF = strcmp(chr1,chr2)
TF = logical
   0

请注意,MATLAB strcmp 函数与 strcmp 的 C 版本不同。当两个字符数组相同而非不同时,strcmp 的 C 版本会返回 0

确定 chr1 是否以 chr2 中的字符开头。

TF = startsWith(chr1,chr2)
TF = logical
   1

startsWith 函数也支持字符串数组。

比较两个字符向量元胞数组。strcmp 函数执行按元素比较,并返回一个与元胞数组大小相同的逻辑数组。

C1 = {'pizza'; 'chips'; 'candy'};
C2 = {'pizza'; 'chocolate'; 'pretzels'};
strcmp(C1,C2)
ans = 3×1 logical array

   1
   0
   0

strcmp 函数也支持字符串数组。

以不区分大小写的方式比较文本

对于不区分大小写的比较,您可以使用 strcmpi,或将 matchesIgnoreCase 名称-值参量结合使用。

例如,比较字符向量是否相等,忽略大小写。

chr1 = 'Hello';
chr2 = 'HELLO';
strcmpi(chr1,chr2)
ans = logical
   1

matches(chr1,chr2,IgnoreCase=true)
ans = logical
   1

比较两个字符串数组,并忽略大小写。strcmpi 函数执行按元素比较。

str1 = ["Hello" "Ciao" "Bonjour"];
str2 = ["HELLO" "BONJOUR" "HOLA"];
strcmpi(str1,str2)
ans = 1×3 logical array

   1   0   0

IgnoreCase 设置为 truematches 函数会查找 str1 中与 str2 的任一元素匹配的元素,忽略大小写。

matches(str1,str2,IgnoreCase=true)
ans = 1×3 logical array

   1   0   1

检查字符串数组和字符数组中的字符

您可以使用 isstrpropisletterisspace 函数检查字符串数组或字符数组中的字符。

  • isstrprop 可检查字符串数组或字符数组中的字符。

  • isletterisspace 函数只能检查字符数组中的字符。

确定字符向量中的哪些字符是空格字符。isspace 会返回一个与 chr 大小相同的逻辑向量。

chr = 'Four score and seven years ago';
TF = isspace(chr)
TF = 1×30 logical array

   0   0   0   0   1   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0   0   0   0   1   0   0   0

isstrprop 函数可以查询字符的许多不同特性。isstrprop 可以确定字符串或字符向量中的字符是字母、字母数字字符、十进制或十六进制数字还是标点字符。

确定字符串中的哪些字符是标点符号。isstrprop 会返回一个长度等于 str 中的字符数量的逻辑向量。

str = "A horse! A horse! My kingdom for a horse!"
str = 
"A horse! A horse! My kingdom for a horse!"
isstrprop(str,"punct")
ans = 1×41 logical array

   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1

确定字符向量 chr 中的哪些字符是字母。

isstrprop(chr,"alpha")
ans = 1×30 logical array

   1   1   1   1   0   1   1   1   1   1   0   1   1   1   0   1   1   1   1   1   0   1   1   1   1   1   0   1   1   1

另请参阅

| | | | | | | | | | | | | | | |

主题