matlab Patten的使用(重要)(Matlab处理字符串一)

news/2024/12/23 16:55:19/

原文连接:https://www.mathworks.com/help/releases/R2022b/matlab/ref/pattern.html?browser=F1help

能使用的搜索函数:

contains确定字符串中是否有模式
matches确定模式是否与字符串匹配
count计算字符串中模式的出现次数
endsWith确定字符串是否以模式结尾
startsWith确定字符串是否以模式开头

编辑文本函数:

extract从字符串中提取子字符串
replace查找并替换一个或多个子字符串
replaceBetween替换起点和终点之间的子字符串
split在分隔符处拆分字符串
erase删除字符串内的子字符串
eraseBetween删除起点和终点之间的子字符串
extractAfter提取指定位置后的子字符串
extractBefore提取指定位置前的子字符串
extractBetween提取起点和终点之间的子字符串
insertAfter在指定的子字符串后插入字符串
insertBefore在指定的子字符串前插入字符串

字符串匹配模式函数:

digitsPattern匹配数字字符
lettersPattern匹配字母字符
alphanumericsPattern匹配字母和数字字符
characterListPattern匹配列表中的字符
whitespacePattern匹配空白字符
wildcardPattern匹配尽可能少的任意类型的字符

搜索规则模式:

optionalPattern使模式匹配可选
possessivePattern匹配模式而不回溯
caseSensitivePattern以区分大小写的方式匹配模式
caseInsensitivePattern以不区分大小写的方式匹配模式
asFewOfPattern模式匹配次数尽可能少
asManyOfPattern模式匹配次数尽可能多

边界模式的函数:

alphanumericBoundary匹配字母数字字符与非字母数字字符之间的边界
digitBoundary匹配数字字符和非数字字符之间的边界
letterBoundary匹配字母字符和非字母字符之间的边界
whitespaceBoundary匹配空白字符和非空白字符之间的边界
lineBoundary匹配行首或行尾
textBoundary匹配文本的开头或结尾
lookAheadBoundary匹配指定模式之前的边界
lookBehindBoundary匹配指定模式之后的边界

正则表达式模式:

regexpPattern匹配指定正则表达式的模式

模式组织函数:

maskedPattern具有指定显示名称的模式
namedPattern指定命名模式

1、以 "R" 开头,后跟四位数的年份,然后是 "a""b"

pat = "R" + digitsPattern(4) + ("a"|"b");
str = ["String was introduced in R2016b." "Pattern was added in R2020b."];
extract(str,pat)
ans =2x1 string array"R2016b""R2020b"

示例

使用模式搜索文本

lettersPattern 是一个典型的、匹配字母字符的字符匹配模式。创建匹配一个或多个字母字符的模式。

txt = ["This" "is a" "1x6" "string" "array" "."];
pat = lettersPattern;

使用 contains 确定在每个字符串中是否存在与 pat 匹配的字符。输出逻辑数组显示 txt 中的前五个字符串包含字母,但第六个字符串不包含字母。

contains(txt,pat)
ans = 1x6 logical array1   1   1   1   1   0

确定文本是否以指定的模式开头。输出逻辑数组显示 txt 中的四个字符串以字母开头,但有两个字符串不是。

startsWith(txt,pat)
ans = 1x6 logical array1   1   0   1   1   0

确定字符串是否完全匹配指定的模式。输出逻辑数组显示 txt 中的哪些字符串只包含字母。

matches(txt,pat)
ans = 1x6 logical array1   0   0   1   1   0

对模式匹配的次数进行计数。输出数值数组显示 txt 的每个元素中匹配 lettersPattern 的次数。请注意,lettersPattern 匹配一个或多个字母,因此一组连续匹配的字母被视为一次匹配。

count(txt,pat)
ans = 1×61     2     1     1     1     0

使用模式编辑文本

digitsPattern 是一个典型的、匹配数字字符的字符匹配模式。创建一个匹配数字字符的模式。

txt = ["1 fish" "2 fish" "[1,0,0] fish" "[0,0,1] fish"];
pat = digitsPattern;

使用 replace 编辑与模式匹配的文本片段。

replace(txt,pat,"#")
ans = 1x4 string"# fish"    "# fish"    "[#,#,#] fish"    "[#,#,#] fish"

通过在匹配的字母后插入 "!" 字符来创建新文本片段。

insertAfter(txt,pat,"!")
ans = 1x4 string"1! fish"    "2! fish"    "[1!,0!,0!] fish"    "[0!,0!,1!] fish"

可以使用 OR 运算符 | 与文本来创建模式。擦除与指定模式匹配的文本。

txt = erase(txt,"," | "]" | "[")
txt = 1x4 string"1 fish"    "2 fish"    "100 fish"    "001 fish"

从新文本中提取 pat

extract(txt,pat)
ans = 1x4 string"1"    "2"    "100"    "001"

对文本中的字符进行计数

使用模式对一段文本中出现的单个字符进行计数。

txt = "She sells sea shells by the sea shore.";

使用 alphanumericsPatternpat 创建为与单个字母匹配的 pattern 对象。提取该模式。

pat = alphanumericsPattern(1);
letters = extract(txt,pat);

显示每个字母出现次数的直方图。

letters = lower(letters);
letters = categorical(letters);
histogram(letters)

显示复杂模式时隐藏细节

使用 maskedPattern 显示变量来代替复杂的模式表达式。

构建一个模式,该模式匹配由数字和算术运算符组成的简单算术表达式。

mathSymbols = asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
mathSymbols = patternMatching:asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

使用 mathSymbols 构建一个模式,该模式匹配在字符之间具有空白的算术表达式。

longExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat = patternMatching:asManyOfPattern(asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1) + whitespacePattern) + asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

显示的模式表达式很长且难以阅读。使用 maskedPattern 显示变量名称 mathSymbols 来代替模式表达式。

mathSymbols = maskedPattern(mathSymbols);
shortExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat = patternMatching:asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbolsShow all details

创建一个包含一些算术表达式的字符串,然后从文本中提取模式。

txt = "What is the answer to 1 + 1? Oh, I know! 1 + 1 = 2!";
arithmetic = extract(txt,shortExpressionPat)
arithmetic = 2x1 string"1 + 1""1 + 1 = 2"

为复杂模式指定名称和说明

基于两个命名模式创建一个模式。命名模式为模式的显示添加上下文。

构建两个模式:一个模式匹配以字母 D 开头和结尾的单词,另一个模式匹配以字母 R 开头和结尾的单词。

dWordsPat = letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary;
rWordsPat = letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary;

使用命名模式构建一个模式,该模式查找以 D 开头和结尾的单词后跟以 R 开头和结尾的单词。

dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = patternMatching:letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary + whitespacePattern + letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary

此模式难以阅读,也不能充分表示其目的。使用 namedPattern 将模式指定为显示指定名称和说明的命名模式以代替模式表达式。

dWordsPat = namedPattern(dWordsPat,"dWords", "Words that start and end with D");
rWordsPat = namedPattern(rWordsPat,"rWords", "Words that start and end with R");
dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = patternMatching:dWords + whitespacePattern + rWordsUsing named patterns:dWords: Words that start and end with DrWords: Words that start and end with RShow more details

创建一个字符串并提取与模式匹配的文本。

txt = "Dad, look at the divided river!";
words = extract(txt,dAndRWordsPat)
words = 
"divided river"

匹配电子邮件地址

构建易于阅读的模式来匹配电子邮件地址。

电子邮件地址遵循结构 username@domain.TLD,其中 usernamedomain 由用句点分隔的标识符组成。构建一个模式,它匹配由字母数字字符和 "_" 字符的任意组合组成的标识符。使用 maskedPattern 将此模式命名为 identifier

identifier = asManyOfPattern(alphanumericsPattern(1) | "_", 1);
identifier = maskedPattern(identifier);

构建模式以匹配由标识符组成的域和子域。创建一个匹配指定列表中的 TLD 的模式。

subdomain = asManyOfPattern(identifier + ".") + identifier;
domainName = namedPattern(identifier,"domainName");
tld = "com" | "org" | "gov" | "net" | "edu";

构建一个模式来匹配电子邮件的本地部分,它匹配一个或多个用句点分隔的标识符。通过组合先前定义的各模式构建一个模式,用于匹配域、TLD 和任何可能存在的子域。使用 namedPattern 将其中每个模式分配给一个命名模式。

username = asManyOfPattern(identifier + ".") + identifier;
domain = optionalPattern(namedPattern(subdomain) + ".") + ...domainName + "." + ...namedPattern(tld);

将所有模式组合成一个模式表达式。使用 namedPatternusernamedomainemailPattern 分配给命名模式。

emailAddress = namedPattern(username) + "@" + namedPattern(domain);
emailPattern = namedPattern(emailAddress)
emailPattern = patternMatching emailAddress:username + "@" + domainUsing named patterns:emailAddress  : username + "@" + domainusername    : asManyOfPattern(identifier + ".") + identifierdomain      : optionalPattern(subdomain + ".") + domainName + "." + tldsubdomain : asManyOfPattern(identifier + ".") + identifierdomainName: identifiertld       : "com" | "org" | "gov" | "net" | "edu"Show all details

创建一个包含电子邮件地址的字符串,然后从文本中提取模式。

txt = "You can reach me by email at John.Smith@department.organization.org";
extract(txt,emailPattern)
ans = 
"John.Smith@department.organization.org"

命名模式允许使用点索引以便访问命名子模式。使用点索引将特定值赋给命名模式 domain

emailPattern.emailAddress.domain = "mathworks.com"
emailPattern = patternMatching emailAddress:username + "@" + domainUsing named patterns:emailAddress: username + "@" + domainusername  : asManyOfPattern(identifier + ".") + identifierdomain    : "mathworks.com"Show all details

处理变量名称问题:

endsWith(str,lettersPattern|digitsPattern|'_')

>> pattern = '(?<![\w])BBBB';

>> replacement = 'AAAA';

>>  outputStr = regexprep('LOP_BBBB=BBBB+qw;', pattern, replacement)

替换变量前一个是非字母数字下划线组成的


http://www.ppmy.cn/news/1557517.html

相关文章

vue中高德地图api的使用

在我们使用高德地图的时候&#xff0c;官方给我们推荐了很多案例&#xff0c;但是这些案例都是使用原生方法接入&#xff0c;并没有提供 vue 或者 react 的demo&#xff0c;vue2的接入网上也很多人都有写过&#xff0c;今天我们就来看看 vue3 如何使用常用的高德地图api。前置工…

量化交易——RSI策略(vectorbt实现)

本文为通过vectorbt&#xff08;以下简称vbt&#xff09;实现量化交易系列第一篇文章&#xff0c;通过使用vbt实现RSI策略从而熟悉其代码框架。 关于本文所使用数据的说明 由于vbt官方文档提供的入门案例使用的数据是通过其内置的yfinance包获取&#xff0c;在国内无法直接访…

电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据

电商数据采集可以通过多种方式完成&#xff0c;其中包括人工采集、使用电商平台提供的API接口、以及利用爬虫技术等自动化工具。以下是一些常用的电商数据采集方法&#xff1a; 人工采集&#xff1a;人工采集主要是通过基本的“复制粘贴”的方式在电商平台上进行数据的收集&am…

我的个人博客正式上线了!

我的个人博客终于上线啦点此访问 经过一番折腾&#xff0c;我的个人博客终于上线啦&#xff01;这是一个属于我自己的小天地&#xff0c;可以用来记录生活点滴、技术分享以及一些随想。 在这里&#xff0c;我想分享一下搭建博客的整个过程和心得体会。 为什么要搭建博客&…

速通Python 第四节——函数

一、函数 编程中的函数和数学中的函数有一定的相似之处. 数学上的函数, 比如 y sin x , x 取不同的值, y 就会得到不同的结果. 编程中的函数, 是一段 可以被重复使用的代码片段 代码示例 : 求一段范围的数的和 , 不使用函数 # 1. 求 1 - 100 的和 sum 0 for i in range(1, …

【2025最新计算机毕业设计】新型吃住玩一体化旅游管理系统【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

【Leetcode 每日一题】1387. 将整数按权重排序

问题背景 我们将整数 x x x 的 权重 定义为按照下述规则将 x x x 变成 1 1 1 所需要的步数&#xff1a; 如果 x x x 是偶数&#xff0c;那么 x x / 2 x x / 2 xx/2。如果 x x x 是奇数&#xff0c;那么 x 3 x 1 x 3 \times x 1 x3x1。 比方说&#xff0c; x …

Go怎么做性能优化工具篇之 trace工具

一、什么是 trace trace 是 Go 语言的一个非常强大的性能分析工具&#xff0c;它用于追踪和记录 Go 程序的执行过程。与 CPU 和内存性能分析工具&#xff08;如 pprof&#xff09;不同&#xff0c;trace 侧重于在时间维度上分析程序的行为&#xff0c;帮助开发者理解程序执行中…