Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >VBA:正则表达式(9) -添加千分位(1/3)

VBA:正则表达式(9) -添加千分位(1/3)

作者头像
Exploring
发布于 2023-10-08 11:54:49
发布于 2023-10-08 11:54:49
32400
代码可运行
举报
运行总次数:0
代码可运行

在之前的一篇文章中介绍了环视,参见文末的参考资料[1]。环视的一个经典应用是添加千分位。添加千分位的一个正则表达式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(?<!\.\d+)(?<=\d+)(?=(\d{3})+(?!\d))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文本:12345678.12345678
替换文本:,
结果:12,345,678.12345678

上面的正则表达式可以拆分成以下三个部分:

(1)?<!\.\d+,逆序否定环视。所在位置的左侧不能出现小数点加数字。这是为了保证小数部分不会添加千分位。

(2)?<=\d+,逆序肯定环视。所在位置的左侧只有数字。这是为了保证在整数部分添加千分位。

(3)?=(\d{3})+(?!\d),顺序肯定环视、顺序否定环视。所在位置的右侧,连续数字字符的个数是三的整数倍;并且其后跟随一个非数字字符(小数点.,或者结束标识符$,等等)。

VBA中通常使用的是VBScript正则(vbscript.regexp),不支持逆序环视。因此,上述的正则表达式在VBA中无法使用,现在通过一种变通的方法来实现这个需求。

1 试错

(1)对于整数,可以使用如下的正则表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(\d)(?=(\d{3})+$)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文本:123456789
替换文本:$1,
结果:123,456,789

从右向左每三位划分为一组,那么末端三位数字的右侧一定就是行的结束标识了;此外,提取三位数字组合左侧的一位数字作为匹配组,用于正则替换。

(2)对于包含小数的字符串,可以使用如下的正则表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(\d)(?=(\d{3})+\.)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文本:1234576.7898
替换文本:$1,
结果:1,234,576.7898

三位数字从小数点开始向左数,所以末端三位数字的右侧就是小数点。

(3)尝试将前面的两个正则表达式合并,得到如下的正则表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(\d)(?=(\d{3})+($|\.))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文本1123456789
替换文本:$1,
结果:123,456,789
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文本21234576.7898
替换文本:$1,
结果:1,234,576.7,898

针对包含小数的字符串,合并之后的正则表达式的运行结果并不理想。结束标识$本意是希望用来匹配整数的结尾,但是小数部分也可能匹配到,所以小数部分也添加了千分位,这显然是不对的。

(未完待续)

参考资料:

[1] 正则表达式:断言(环视)

[2] 正则表达式在线测试(https://c.runoob.com/front-end/854/?optionGlobl=global

[3] 正则测试(https://tool.chinaz.com/regex

[4] VBA之正则表达式(9)-- 添加千分位(1/3)(https://blog.csdn.net/taller_2000/article/details/89784517

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VBA:正则表达式(9) -添加千分位(2/3)
上一篇文章(参见文末的参考资料[1])提到,简单合并正则表达式的运行结果并不理想,问题在于小数部分也可能匹配到。
Exploring
2023/10/09
3990
VBA:正则表达式(9) -添加千分位(2/3)
VBA:正则表达式(9) -添加千分位(3/3)
上一篇文章(参见文末的参考资料[1])提到,包含小数的字符串出现在文本末尾时,正则表达式的运行效果还是不太理想。由于小数部分符合匹配规则,因此,小数部分也添加了千分位。
Exploring
2023/10/10
3640
VBA:正则表达式(9) -添加千分位(3/3)
正则表达式:断言(环视)
1 顺序肯定环视1.1 匹配指定内容的左侧位置1.2 匹配数字前的小写英文单词部分1.3 校验字符串长度2 顺序否定环视3 逆序肯定环视4 逆序否定环视
Exploring
2023/10/04
1.5K0
正则表达式:断言(环视)
JavaScript如何对数字进行千分位货币格式化
在以前,我一直都是利用正则表达式进行手动插入千分位,比如,写了个这样的方法(注释比较详细):
Yiiven
2022/12/15
2.7K0
VBA:正则表达式(4) -提取日期和金额
示例:数据保存在A列中,需要将其中的日期和金额分别提取至B列和C列。其中日期有两种不同的格式,金额可能包含小数点、千分位和货币标识。
Exploring
2023/09/24
4680
VBA:正则表达式(4) -提取日期和金额
正则表达式介绍与使用
正则表达式(Regular Expression)描述字符串结构模式的形式化表达方法,正则(Regex)表达式处理的对象的字符串或者抽象地说是一个对象序列(计算机体系的本质数据结构) 正则表达式是一种文本模式包括普通字符(例如a 到 z 之间的字母)和特殊字符(称为”元字符”),用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”;
全栈工程师修炼指南
2020/10/23
1.3K0
正则表达式介绍与使用
VBA:正则表达式(8) -重复字符的分组
需求:数据保存在A列,需要将其中的重复字符分拆后保存在后续的列中,这里只考虑小写英文字符。
Exploring
2023/10/05
6550
VBA:正则表达式(8) -重复字符的分组
常用正则表达式
/^([0-9]{1,}\.[0-9]{1,}|[0-9]{1,})$/    数字或小数点
Java架构师必看
2020/04/22
6670
【网络编程】正则表达式快速上手指南
可以通过 std::regex_constants 中的标志调整正则行为:
修修修也
2025/03/31
1050
【网络编程】正则表达式快速上手指南
Java 正则表达式
为让大家对正则表达式底层实现有一个直观的映象,给大家举个实例给你一段字符串(文本),请找出所有四个数字连在一起的子串,比如:应该找到19981999 3443 9889>分析底层实现RegTheory.java
用户9615083
2022/12/25
1.1K0
Java 正则表达式
常用正则表达式
  这些正则皆为日常开发总结,一般常用的都用,来源有来自自己总结的,还有的是从网上记录下来的,希望对大家有个帮助,完好正则提高程序性能!
追逐时光者
2019/08/28
1.5K0
关于常用的正则表达式的分享
  1.正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
用户7053485
2020/03/12
1.2K0
正则表达式
简单理解就是:同一个全局匹配的正则对同一个目标串匹配后,匹配过的部分串将不再匹配。
心谭博客
2020/04/20
5080
正则表达式总结
一、元字符 . 匹配除换行符以外的任意字符 \w 匹配单词(字母、数字、下划线、汉字) \s 匹配任意空白符(空格、制表符tab、换行符、中文全角空格) \d 匹配数字 \b 匹配单词的开始或结束,只是一个位置 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b:单词分界符,匹配一个位置(单词开头或结尾),位置处单词结束空格、标点符等。其实\b匹配位置为:其前一个字符和后一个字符不全是\w。 eg. \bhi\b.*\bLucy\b匹配hi后不远跟一个Lucy。 *:指定前面的字符可以重复n次匹配。则.*表
机器学习AI算法工程
2018/03/14
8810
精通正则表达式 - 正则表达式实用技巧
        希望匹配连续多行文本,常见的情况是,一个逻辑行(logical line)可以分为许多现实的行,每一行以反斜杠结尾。
用户1148526
2023/10/14
9980
正则表达式总结
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
Dream城堡
2018/09/10
9460
有必要了解的正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。学习正则表达式很大程度上就是学习正则表达式的语法规则。
AI码真香
2022/09/13
7770
Python_正则表达式
re.compile():用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 两个函数使用,一般建议使用这种编译方式
py3study
2020/01/19
5750
Python_正则表达式
正则表达式
匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
用户7657330
2022/09/08
6060
python 正则表达式匹配数字或者小数点_五位小数正则表达式
正则表达式是用字符串表示的一种语法,用于描述一种字符串匹配的模式。 正则表达式中大多数字符的含义是通用的,比如符号 ^ 和 $ 在绝大多数语言的正则表达式中都表示行头和行尾;但也可能在某些语法上存在差异,这需要依据特定语言而定。
全栈程序员站长
2022/11/04
2.7K0
相关推荐
VBA:正则表达式(9) -添加千分位(2/3)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档