Tcl常用命令备忘录-正则命令篇

 正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中,可以使用正则表达式对字符串进行匹配、查找和替换。

regexp

语法: 

regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...?

其中,?选项?为可选项,可以省略。正则表达式为要匹配的模式,字符串为要匹配的文本。?变量1 变量2 ...?为可选的变量,用于存储匹配结果。

参数说明:

  • 选项:用于控制regexp命令的行为,常用的选项有:
    • -nocase:忽略大小写匹配。
    • -inline:返回匹配结果,而不是返回值。
  • 正则表达式:定义匹配模式的字符串,可以使用各种正则表达式元字符和特殊字符。
  • 字符串:要匹配的字符串。
  • 变量:用于存储匹配结果的变量,可以使用$符号在后续代码中引用。

示例:

1、匹配首尾空格

set str "  Tcl Scripting  "
regexp {^\s*(.*)\s*$} $str match result
puts $result

输出:

Tcl Scripting

解释:

  • 正则表达式{^\s*(.)\s$}中,^表示匹配字符串开头,\s表示匹配零个或多个空格,(.)表示匹配任意字符任意次,\s*$表示匹配零个或多个空格,并匹配字符串结尾。
  • regexp命令将$Str与正则表达式进行匹配,匹配结果存储在变量$result中。
  • 最终输出变量$result的值。

2、查找字符串中的数字

set str "Tcl Scripting 2020"
regexp -inline {\d+} $str match result
puts $result

输出:

2020

解释:

  • 正则表达式{\d+}中,\d表示匹配数字字符,+表示匹配至少一个数字字符。
  • 使用了选项-inline,将匹配结果直接返回。
  • 最终输出变量$result的值。

3、替换字符串中的单词

set str "Tcl Scripting is fun"
set new_str [regsub -nocase {\bis\b} $str "is not"]
puts $new_str

输出:

Tcl Scripting is not fun

解释:

  • 使用了命令regsub,将字符串$str中的\bis\b替换成is not。
  • 选项-nocase表示忽略大小写匹配。
  • 最终输出变量$new_str的值。

4、使用变量存储匹配结果

set str "Tcl Scripting 2020"
set pattern {\d+}
regexp $pattern $str match result
puts "Matched: $result"
set start [lindex $result 0]
set end [lindex $result end]
puts "Start position: $start, end position: $end"

输出:

Matched: 2020
Start position: 13, end position: 16

解释:

  • 将正则表达式存储在变量$pattern中,方便重复使用。
  • 使用regexp命令进行匹配,将匹配结果存储在变量$result中。
  • 输出匹配到的数字,使用lindex命令获取匹配结果的起始位置和结束位置。
  • 输出匹配结果的起始位置和结束位置。

regsub

语法:

regsub ?-all? ?-nocase? exp string subSpec varName

参数说明:

  • -all:可选参数,表示全局替换所有符合正则表达式的匹配项。
  • -nocase:可选参数,表示忽略大小写。
  • exp:正则表达式。
  • string:目标字符串。
  • subSpec:替换规则。
  • varName:替换后的结果存储在此变量中。

示例:

1、将字符串中的所有数字替换为"#":

set str "hello123world456"
regsub -all {\d} $str "#" result
puts $result

输出:

hello###world###

解释:

\d匹配任何数字,-all选项表示全局替换。

2、将字符串中的所有空格替换为"_":

set str "hello world"
regsub {\s} $str "_" result
puts $result

输出:

hello_world

解释:

\s匹配任何空白字符,包括空格、制表符、换行符等。由于没有使用-all选项,只替换了第一个匹配项。

3、将字符串中的所有单词的首字母大写:

set str "hello world"
regsub -all -- {\w+} $str {string toupper [string index "&" 0]} result
puts $result

输出:

Hello World

解释:

\w+匹配任何单词,string toupper [string index "&" 0]表示将匹配到的字符串的首字母大写。由于使用了-all选项,全局替换。

4、将字符串中的所有"_"后面的字母大写:

set str "hello_world"
regsub -all -- {_([a-z])} $str {string toupper "&"} result
puts $result

输出:

hello_World

解释:

_([a-z])匹配包含"_"后面一个小写字母的子串,string toupper "&"将匹配到的子串全部大写。由于使用了-all选项,全局替换。

5、忽略大小写,将字符串中的所有"abc"替换为"xyz":

set str "abcABCabC"
regsub -nocase -all {abc} $str "xyz" result
puts $result

输出:

xyzXYZxYz

解释:

-nocase选项表示忽略大小写。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security OAuth2授权原理、流程与源码解读

文章目录 前言AuthorizationServerConfigurerAdapter(身份认证服务配置适配器)OAuth2AuthorizationServerConfiguration(OAuth2授权服务配置) EnableAuthorizationServer(开启身份认证服务)AuthorizationServerEndpointsConfigurations身份认证服务站点配置类AuthorizationEndp…

Qt编写精美输入法(历时十年迭代/可换肤/支持Qt4/5/6/win/linux/mac/嵌入式等)

一、前言 大概是从2012年就开始研究用Qt写输入法,因为项目需要,嵌入式板子上,没有对应的输入法,当初使用过很多NVR,里面也是鼠标按下弹出输入法面板进行输入,可以切换数字和字母及中文,于是借鉴…

jmeter如何进行http压力测试

目录 前言: 1、添加线程组: 2、添加采样器: 3、添加监视器 压力测试知识说明 前言: JMeter是一个基于Java的开源压力测试工具,可用于评估Web应用程序的性能,包括HTTP、HTTPS、FTP、SOAP、Restful、JD…

Oracle-高版本SQL优化分析(bind mismatch)

背景: 接到用户报障说一套Oracle19c数据库近期出现insert语句执行变慢的情况,执行一次数据插入需要1秒的时间,而且问题发生的数据库是跑在一体机上面,数据插入正常不应该这么慢,需要分析插入慢的原因 问题: 数据库近期出现insert…

StarRocks 文章收集

StarRocks在58的实践 StarRocks在58的实践 - 墨天轮StarRocks在58的实践 --2022-06-08https://www.modb.pro/db/639611 StarRocks之系统架构 StarRocks之系统架构 - 墨天轮https://www.modb.pro/db/610300 StarRocks小规模集群部署最佳实践(1/2) 0016.S StarRocks小规模集…

2自由度并联仿生腿的制作

1. 运动功能说明 本文实例将实现2自由度并联仿生腿模组运动起来,模拟实现狗腿行走的动作。 2. 结构说明 2自由度并联仿生腿模组是由两个舵机驱动的,它的所有动作都将在两个舵机的配合运动下实现。 3. 运动原理说明 2自由度并联仿生腿模组运动的点位如下…

数据结构-各种树(二叉树、二叉查找树、平衡二叉树、红黑树、B树、B+树)

文章目录 二叉树二叉查找树平衡二叉树红黑树B树B树 二叉树 概念:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一…

2023 年6月开发者调查统计结果——最流行的技术(1)

2023 年6月开发者调查统计结果——最流行的技术(1) 本文目录: 一、编程、脚本和标记语言 二、数据库 三、云平台 四、网络框架和技术 五、其他框架和库 六、其他工具 七、集成开发环境 八、异步工具 九、同步工具 ​十、操作系统 …

端午出行电脑没网怎么办?无线网卡解决网络问题

无线网卡是一种可以让电脑或其他设备通过无线信号连接网络的硬件设备,无线网卡有多种类型和接口,例如USB无线网卡,PCI-E无线网卡,PCMCIA无线网卡等。端午出行在即,不妨看看驱动人生准备的无线网卡攻略,让大…

基于Python的招聘信息可视化系统,附源码

文章目录 1 简介2 技术栈3 总体设计3.1 系统结构3.2 数据库设计3.2.1 数据库实体3.2.2 数据库表设计 4 运行设计4.1 招聘热门行业分析4.2热门岗位分析界面4.3招聘岗位学历分析界面4.4岗位分布分析界面 5 源码下载 1 简介 基于Python的招聘信息可视化系统,通过对招聘数据进行分…

MFC扩展库BCGControlBar Pro v33.5亮点 - Ribbon Bar等全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

Linux国产操作系统,UCA-系统工程师学习必备技能,使用dpkg管理软件包、apt命令、内网获取依赖包及源码安装

目录 ​编辑 1.使用dpkg管理软件包 2.apt命令 3.内网获取依赖包 4.源码安装 1.使用dpkg管理软件包 第一种方法当然可以上网搜索软件安装包,下载然后解压成软件。 第二种也就是我接下来要介绍的,dpkg 命令,dpkg 全称叫做debian package…

步长(stride) | 填充(padding) | 扩长(dilation)

这几个名词中文真的好难翻译,不是大佬就不要造名词了,后面还是老老实实用英文吧!(标题是机翻的 。) stride stride 很好理解,stride 就是卷积核移动的步长。 如下图: stride1 stride2 paddi…

技术新动向 | 谷歌云大举扩展安全 AI 生态系统

【本文由 Cloud Ace 整理发布, Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件…

【设计模式】SpringBoot优雅使用策略模式

文章目录 1.概述1.1.简述策略模式 2.实现方法2.1.实现思路2.2.实现代码2.3.策略拓展2.4.执行调用 3.总结 1.概述 本篇文章主要会描述SpringBoot与策略模式的结合使用,因为不涉及到理论部分,所以在阅读本篇之前,需要对策略模式的理论已经有了…

HarmonyOS学习路之开发篇—Java UI框架(JS FA调用Java PA)

JS FA调用Java PA机制 使用兼容JS的类Web开发范式的方舟开发框架提供了JS FA(Feature Ability)调用Java PA(Particle Ability)的机制,该机制提供了一种通道来传递方法调用、处理数据返回以及订阅事件上。 当前提供Ab…

鼠标键盘实验

文章目录 USB参考资料USB设备STM32F407USB 硬件连接软件移植官方HIDSTM32F4USB通信库 USB参考资料 ①《STM32F4xx中文参考手册》-第30章 全速USB on-the-go(OTG_FS) ②光盘:STM32参考资料:STM32 USB 学习资料-CD00289278.pdf(UM1021) ③光盘:STM32参考资…

Python3 函数与数据结构 | 菜鸟教程(十一)

目录 一、Python3 函数 (一)定义一个函数 1、你可以定义一个由自己想要功能的函数,以下是简单的规则: 2、语法 3、实例 ①让我们使用函数来输出"Hello World!": ②更复杂点的应用&#xff…

【gcc, cmake, eigen, opencv,ubuntu】一.gcc介绍

文章目录 gcc介绍1.查看当前gcc 版本2.安装其他版本的gcc3.设置多个版本的优先级4.修改默认的版本5.查看cpu信息 gcc介绍 gcc介绍和makefile介绍 1.查看当前gcc 版本 gcc --version2.安装其他版本的gcc sudo apt install gcc-10 g-10这样我们电脑里包含gcc-9 和 gcc-10两个…

干货分享|HOOPS Web平台和Polygonica进行增材制造的云CAM服务示例

这篇文章提供了一个示例项目,展示了使用 Machineworks Polygonica 和 HOOPS Web 平台进行增材制造的云 CAM 服务。该项目作为一个示例,说明了如何在服务器端使用 Polygonica 与 HOOPS Communicator 和 Exchange 来开发云服务。 它涵盖了增材制造 CAM 的…