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

news2024/12/19 20:31:09

原文连接: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 array

   1   1   1   1   1   0

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

startsWith(txt,pat)
ans = 1x6 logical array

   1   1   0   1   1   0

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

matches(txt,pat)
ans = 1x6 logical array

   1   0   0   1   1   0

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

count(txt,pat)
ans = 1×6

     1     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 = pattern
  Matching:

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

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

longExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat = pattern
  Matching:

    asManyOfPattern(asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1) + whitespacePattern) + asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

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

mathSymbols = maskedPattern(mathSymbols);
shortExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat = pattern
  Matching:

    asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols

  Show 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 = pattern
  Matching:

    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 = pattern
  Matching:

    dWords + whitespacePattern + rWords

  Using named patterns:

    dWords: Words that start and end with D
    rWords: Words that start and end with R

  Show 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 = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress  : username + "@" + domain
      username    : asManyOfPattern(identifier + ".") + identifier
      domain      : optionalPattern(subdomain + ".") + domainName + "." + tld
        subdomain : asManyOfPattern(identifier + ".") + identifier
        domainName: identifier
        tld       : "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 = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress: username + "@" + domain
      username  : asManyOfPattern(identifier + ".") + identifier
      domain    : "mathworks.com"

  Show all details

处理变量名称问题:

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

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

>> replacement = 'AAAA';

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例 1、拉取镜像 docker pull mongo:5.0.5 2、创建 mongodb容器实例 docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAMEsalaryMongo \-e MONGO_INITDB_ROOT_PASSWORD123456 \-p 27017:27017 \mongo:5.0.5 3、进入容器&am…

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…

Spring Boot 3.X:Unable to connect to Redis错误记录

一.背景 最近在搭建一个新项目&#xff0c;本着有新用新的原则&#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题&#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息&#xff0c;发现没问题&#xff1b;再去检查配置类&am…

MinT: 第一个能够生成顺序事件并控制其时间戳的文本转视频模型。

MinT 是第一个能够生成顺序事件并控制其时间戳的文本转视频模型。使用 MinT 生成时间控制的多事件视频。给定一系列事件文本提示及其所需的开始和结束时间戳&#xff0c;MinT 可以合成具有一致主题和背景的平滑连接事件。此外&#xff0c;它可以灵活地控制每个事件的时间跨度。…

C语言实验 结构体2

时间:2024.12.18 6-5 评委打分-t-CalcuScore 代码 // 定义结构体 struct Score {int id;char name[10];int value[17];double finalScore;int rank; };// 计算最终成绩 void CalcuScore(struct Score grade[], int n) {for (int i = 0; i < n; i++) {int max = grade[i].…

第6章 第一组重构

最常用到的重构就是用提炼函数&#xff08;106&#xff09;将代码提炼到函数中&#xff0c;或者用提炼变量&#xff08;119&#xff09;来提炼变量。既然重构的作用就是应对变化&#xff0c;你应该不会感到惊讶&#xff0c;我也经常使用这两个重构的反向重构——内联函数&#…

基于python对网页进行爬虫简单教程

python对网页进行爬虫 基于BeautifulSoup的爬虫—源码 """ 基于BeautifulSoup的爬虫### 一、BeautifulSoup简介1. Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要…

C语言中文件是什么?文件文本和二进制文件的区别

1、C语言中文件是什么&#xff1f; 我们对文件的概念已经非常熟悉了&#xff0c;比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种&#xff0c;最主要的作用是保存数据。 在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同…

vmware workstation pro上创建虚拟机

vmware workstation pro上创建虚拟机 下载vmware workstation pro软件安装后并运行点击主页&#xff0c;选择创建虚拟机 创建虚拟机成功后会出现如下界面 可以点击设置按钮删除不需要的硬件&#xff0c;也可以添加新的硬件设备&#xff0c;最终硬件信息如下图 至此虚拟机…

【数学建模】利用Matlab绘图(2)

一、Matlab中plot函数的基本用法 在matlab中&#xff0c;函数的基本用法主要包括以下几种 第一类&#xff1a; plot(X,Y,LineSpec) 第二类&#xff1a; plot(tbl,xvar,yvar) 1.1 第一类 1.1.1x-y坐标 x和y的选择取决于绘图所需的数据类型以及图像的类型。下表列出了几种…

ASP.NET Core - 依赖注入 自动批量注入

依赖注入配置变形 随着业务的增长&#xff0c;我们项目工作中的类型、服务越来越多&#xff0c;而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册&#xff0c;这将是非常麻烦的&#xff0c;入口文件需要频繁改动&#xff0c;而且代码组织管理也会变…

Oracle 适配 OpenGauss 数据库差异语法汇总

背景 国产化进程中&#xff0c;需要将某项目的数据库从 Oracle 转为 OpenGauss &#xff0c;项目初期也是规划了适配不同数据库的&#xff0c;MyBatis 配置加载路径设计的是根据数据库类型加载指定文件夹的 xml 文件。 后面由于固定了数据库类型为 Oracle 后&#xff0c;只写…

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版) 文章目录 Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配置时间同步6.配置内核转发及网桥过滤二.容器运行时Containerd安装(所有节点)…

[LeetCode-Python版]21. 合并两个有序链表(迭代+递归两种解法)

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#x…

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引&#xff0c;也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素&#xff0c;例如&#xff1a; - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1&#xff0c;用 A ( ) A() A()提取即可&#xff0c; A A A为原矩阵的名称。 例如&…

sql 批量修改字段 的默认值

SELECT COLUMN_NAME, NUMERIC_PRECISION, NUMERIC_SCALE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA financeproject AND TABLE_NAME finance_balance AND DATA_TYPE decimal; 查出的字段 excel 拼接 修改语句 ALTER TABLE finance_income MODIFY COLUMN yy…

CVE-2023-0562【春秋云镜】

目录 CVE-2023-0562漏洞概述漏洞利用方式影响范围修复建议安全编码示例靶标介绍 CVE-2023-0562 CVE-2023-0562 是一个针对银行储物柜管理系统的SQL注入漏洞。该漏洞影响了储物柜管理系统中处理用户输入的部分&#xff0c;攻击者可以利用此漏洞未经授权地访问数据库中的敏感信息…

vue el-dialog实现可拖拉

el-dialog实现拖拉&#xff0c;每次点击度居中显示&#xff0c;以下贴出代码具体实现&#xff0c;我是可以正常拖拉并且每次度显示在中间&#xff0c;效果还可以&#xff0c;需要的可以丢上去跑跑 组件部分&#xff1a; <el-dialog:visible.sync"dialogVisible"…

MySQL:库和表的操作

目录 一. 查看数据库 二. 创建数据库 三. 字符集和校验规则 四. 修改和删除数据库 4.1 数据库修改 4.2 数据库删除 五. 备份与恢复 5.1 备份 5.2 还原 5.3 注意事项 5.4 查看连接情况 六. 创建表 七. 查看表结构 八. 修改表 九. …