精易论坛

标题: 求求了能不能不要老是用正则文本删数字 [打印本页]

作者: 笨来无一悟    时间: 2024-6-25 12:30
标题: 求求了能不能不要老是用正则文本删数字
在问答区起码看见十几次 遇到需要删除数字的时候 使用 正则d再替换这样可以快好多
  
子程序名返回值类型公开备 注
文本删数字文本型 
参数名类 型参考可空数组备 注
原文文本型
变量名类 型静态数组备 注
文本快速文本对象 
计次整数型 
文本.置文本 (原文)
变量循环首 (48, 57, 1, 计次)
文本.替换子文本 (字符 (计次), , , , )
变量循环尾 ()
返回 (文本.取文本 (, ))


i支持库列表   支持库注释   
commobj通用对象支持库


作者: 笨来无一悟    时间: 2024-6-25 12:38
都知道汇编快 可以汇编太难了 怎么处理文本 俺还没学会能快一点算一点 将就着用先
  
子程序名返回值类型公开备 注
文本重复行文本型 
参数名类 型参考可空数组备 注
原文文本型
变量名类 型静态数组备 注
文本快速文本对象 
分割文本型0
节点节点 
重复快速文本对象 
计次整数型 
文本.置文本 (原文)
分割 = 文本.分割文本 ( #换行符, )
计次循环首 (取数组成员数 (分割), 计次)
如果真 (取反 (节点.加入属性 (分割 [计次], “”)))
重复.添加 (分割 [计次], #换行符 )

计次循环尾 ()
返回 (重复.取文本 (, ))


i支持库列表   支持库注释   
commobj通用对象支持库
EDataStructure数据结构支持库


作者: 笨来无一悟    时间: 2024-6-25 12:58
本帖最后由 笨来无一悟 于 2024-6-25 13:02 编辑

吃饭去 回头再研究研究
作者: xf702    时间: 2024-6-25 13:04
快速文本。。。好!!
作者: ZHuanR    时间: 2024-6-25 13:56
新技能已get√
作者: 外星星人    时间: 2024-6-25 14:00
用得到。支持大佬分享
作者: 一指温柔    时间: 2024-6-25 14:37
支持开源~!感谢分享
作者: long280556182    时间: 2024-6-25 15:23
谢谢开源,精易有你更精彩
作者: 艾玛克138    时间: 2024-6-25 15:26
谢谢大佬,很好很实用的教程。
作者: 福仔    时间: 2024-6-25 17:09
我也写了一个, 目测应该是比快速文本要快
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
原文文本型 
汇编版结果文本型 
普通版结果文本型 
原文 = “测试123abc”
汇编版结果 = 文本删数字_汇编版 (原文)
普通版结果 = 文本删数字 (原文)
输出调试文本 (汇编版结果, 普通版结果)
子程序名返回值类型公开备 注
文本删数字_汇编版文本型 
参数名类 型参考可空数组备 注
原文文本型
变量名类 型静态数组备 注
文本长度整数型 
返回文本文本型 
文本长度 = 取文本长度 (原文)
返回文本 = 取空白文本 (文本长度)
_文本删数字 (取指针_文本型 (原文), 文本长度, 取指针_文本型 (返回文本))
返回 (返回文本)
子程序名返回值类型公开备 注
文本删数字文本型 
参数名类 型参考可空数组备 注
原文文本型
变量名类 型静态数组备 注
文本长度整数型 
返回文本文本型 
原文本指针整数型 
缓冲区指针整数型 
ch字节型 
写入长度整数型 
文本长度 = 取文本长度 (原文)
如果真 (文本长度 = 0)
返回 (“”)

返回文本 = 取空白文本 (文本长度)
原文本指针 = 取指针_文本型 (原文)
缓冲区指针 = 取指针_文本型 (返回文本)
循环判断首 ()
ch = __get_byte (原文本指针, 0)
原文本指针 = 原文本指针 + 1
如果真 (ch < 48 ch > 57)  ' 48='0', 57='9'
__set_byte (缓冲区指针, 写入长度, ch)
写入长度 = 写入长度 + 1

循环判断尾 (ch ≠ 0)
__set_byte (缓冲区指针, 写入长度, 0)
返回 (返回文本)
子程序名返回值类型公开备 注
_文本删数字整数型 
参数名类 型参考可空数组备 注
原文整数型
尺寸整数型
缓冲区整数型
置入代码 ({ 139, 85, 16, 133, 210, 116, 41, 131, 125, 12, 0, 124, 35, 86, 139, 117, 8, 51, 201, 235, 13, 70, 60, 48, 124, 4, 60, 57, 126, 4, 136, 4, 17, 65, 138, 6, 132, 192, 117, 237, 136, 4, 17, 139, 193, 94, 235, 2, 51, 192, 93, 194, 12, 0 })
返回 (0)
子程序名返回值类型公开备 注
取指针_文本型整数型 取到的是变量在堆中的地址,和 取变量数据地址() 一样
参数名类 型参考可空数组备 注
文本文本型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)
子程序名返回值类型公开备 注
__set_byte整数型 请确保指针的合法性,写到内存
参数名类 型参考可空数组备 注
lpAddr整数型内存地址
offset整数型偏移
value字节型写入值
置入代码 ({ 139, 93, 8, 139, 77, 12, 139, 4, 11, 138, 85, 16, 136, 20, 11, 201, 194, 12, 0 })
' mov ebx,[ebp+8]
' mov ecx,[ebp+12]
' mov eax,[ecx+ebx]
' mov dl,[ebp+16]
' mov [ecx+ebx],dl
' leave
' ret 12
返回 (0)
子程序名返回值类型公开备 注
__get_byte字节型 请确保指针的合法性,读取内存
参数名类 型参考可空数组备 注
lpAddr整数型内存地址
offset整数型偏移
置入代码 ({ 139, 69, 8, 139, 93, 12, 139, 4, 24, 201, 194, 8, 0 })
' mov eax,[ebp+8]
' mov ebx,[ebp+12]
' mov eax,[eax+ebx]
' leave
' ret 8
返回 (0)


文本删数字.e (6.63 KB, 下载次数: 4)


作者: 福仔    时间: 2024-6-25 17:20
福仔 发表于 2024-6-25 17:09
我也写了一个, 目测应该是比快速文本要快
[e=1]
.版本 2

这个普通版的也比快速文本要快, 替换文本一次就需要循环整个文本, 你替换10次, 至少循环10次
先不说内部会不会有分配内存的操作, 光是循环你都比我这个处理方式要多了9倍
我这个就循环一次, 算是循环两次吧, 取文本长度也循环了一次
而且替换的操作可是要比较复杂的, 先是要查找文本, 就算是使用了什么算法, 替换的时间复杂度也达不到O(n)
你可以找个大文本测试一下, 我感觉非汇编版的能比你快速文本替换的方式快个5倍以上

作者: 笨来无一悟    时间: 2024-6-25 17:33
福仔 发表于 2024-6-25 17:20
这个普通版的也比快速文本要快, 替换文本一次就需要循环整个文本, 你替换10次, 至少循环10次
先不说内部 ...

望尘莫及

怎么实现的.jpg (78.83 KB, 下载次数: 0)

怎么实现的.jpg

作者: 艾玛克138    时间: 2024-6-25 21:13
老大出品,必属精品
作者: sd7044236    时间: 2024-6-25 21:14
必须顶一下
作者: 明天自然醒    时间: 2024-6-26 01:05




都差不多

有没有可能是正则表达式的库不行,PCRE库还是很强大的,功能丰富,开发效率高啊

测试1000次,本帖子的网页源码参与/回复主题 - 求求了能不能不要老是用正则文本删数字 - 源码区 精易论坛 (125.la)

作者: 查过    时间: 2024-6-26 07:17
全都是大佬~
作者: 豆豆灰常开心    时间: 2024-6-26 07:22
已经顶贴,感谢您对论坛的支持!
作者: 396384183    时间: 2024-6-26 08:52
感谢您对论坛的支持!
作者: kyo9766    时间: 2024-6-26 09:10
小白看着正则有点懵,感谢分享
作者: please    时间: 2024-6-26 09:36
感谢分享,支持开源!!!
作者: 嫂子    时间: 2024-6-26 13:03
正在封装易格式目的代码
[13:02:03] 开始运行被调试程序
[13:02:03] * “DEELX->0”
[13:02:03] * “pcre->15”

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
a文本型 
start整数型 
i整数型 
ret文本型 
time双精度小数型 
a = “测试123abc”
start = 取启动时间 ()
计次循环首 (1000, i)
ret = ZZDEELX (a)
计次循环尾 ()
time = 取启动时间 () - start
调试输出 (“DEELX->”到文本 (time))
start = 取启动时间 ()
计次循环首 (1000, i)
ret = ZZpcre (a)
计次循环尾 ()
time = 取启动时间 () - start
调试输出 (“pcre->”到文本 (time))
子程序名返回值类型公开备 注
ZZDEELX文本型 
参数名类 型参考可空数组备 注
data文本型
变量名类 型静态数组备 注
zz正则表达式DEELX 
zz.创建 (“\d+”, , )
返回 (zz.替换 (data, “”, , ))
子程序名返回值类型公开备 注
ZZpcre文本型 
参数名类 型参考可空数组备 注
data文本型
变量名类 型静态数组备 注
zz正则表达式PCRE 
zz.创建 (“\d+”, , )
返回 (zz.替换 (data, “”, ))


i支持库列表   支持库注释   
spec特殊功能支持库
DeelxRegEx(未知支持库)
e2eeE2EE互联网服务器套件



作者: 笨来无一悟    时间: 2024-6-26 13:24
嫂子 发表于 2024-6-26 13:03
正在封装易格式目的代码
[13:02:03] 开始运行被调试程序
[13:02:03] * “DEELX->0”

编译之后差不多

编译之后差不多.png (37.9 KB, 下载次数: 2)

编译之后差不多.png

作者: 嫂子    时间: 2024-6-26 16:44
笨来无一悟 发表于 2024-6-26 13:24
编译之后差不多

百万级别了。差不多。
我测试1000次 是DELLEX牛一点
作者: 嫂子    时间: 2024-6-26 16:49
笨来无一悟 发表于 2024-6-26 13:24
编译之后差不多

你要在追求速度的话。
正则是可以公用的。
你新建一个 正则对象 全局。
然后给他赋值好  正则表达式。

使用的时候直接使用 replace   1234567次  大概也就需要2秒不到
作者: 嫂子    时间: 2024-6-26 16:51
嫂子 发表于 2024-6-26 16:49
你要在追求速度的话。
正则是可以公用的。
你新建一个 正则对象 全局。

再往上那就换语言或者换引擎了。
Delphi我测试下来 300ms  
作者: 嫂子    时间: 2024-6-26 16:52
[16:48:40] 开始运行被调试程序
[16:48:42] * “DEELX->1656”
[16:48:44] * “pcre->1797”
[16:48:48] 被调试易程序运行完毕

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
zz2正则表达式PCRE  
zz1正则表达式DEELX  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
a文本型 
start整数型 
i整数型 
ret文本型 
time双精度小数型 
zz1.创建 (“\d+”, , )
zz2.创建 (“\d+”, , , )
a = “测试123abc”
start = 取启动时间 ()
计次循环首 (1234567, i)
ret = ZZDEELX (a)
计次循环尾 ()
time = 取启动时间 () - start
调试输出 (“DEELX->”到文本 (time))
start = 取启动时间 ()
计次循环首 (1234567, i)
ret = ZZpcre (a)
计次循环尾 ()
time = 取启动时间 () - start
调试输出 (“pcre->”到文本 (time))
子程序名返回值类型公开备 注
ZZDEELX文本型 
参数名类 型参考可空数组备 注
data文本型
返回 (zz1.替换 (data, “”, , ))
子程序名返回值类型公开备 注
ZZpcre文本型 
参数名类 型参考可空数组备 注
data文本型
返回 (zz2.替换 (data, “”, ))


i支持库列表   支持库注释   
e2eeE2EE互联网服务器套件
DeelxRegEx(未知支持库)
spec特殊功能支持库



作者: 嫂子    时间: 2024-6-26 16:54
笨来无一悟 发表于 2024-6-26 13:24
编译之后差不多

复用正则即可 ,你的正则本来就是固定的。
1234567次

耗时 1.7秒
作者: please    时间: 2024-6-27 09:37
感谢分享,支持开源!!!
作者: shuya1    时间: 2024-6-27 23:20
感谢分享,很给力!~
作者: please    时间: 2024-6-28 09:39
感谢分享,支持开源!!!
作者: xue9528    时间: 2024-8-2 23:53
感谢分享,很给力!~




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4