Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 爱疯

[已解决]转为以逗号分隔的字符串

  [复制链接]
 楼主| 发表于 2012-2-21 11:49 | 显示全部楼层
吕?布 发表于 2012-2-21 11:42
这个代码比较长

Function lvbu2(x As String, y As String, z As String) As String

吕布的和前面82的思路,相比其他的方法,对我来说理解的麻烦些,慢慢学习{:091:}
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2012-2-21 11:49 | 显示全部楼层
爱疯 发表于 2012-2-21 11:42
(^\|+|\|+$)|(\|+)

这样,我才看清楚了你的正则表达式。对于分支条件,(\|+)必须放在后面。不然从左往 ...

对哦,我把z给忘记了,弄的不通用了.
虽然我的代码是用一句了,但是其实pattern更长而且在pattern内的判断更多了,最重要的是在代码中进行了两次替换,所以效率不应该更高.只不过尝试一下一串pattern的方法罢了.
我还是更倾向于2L的代码,不过2L应该是对"|","\"等特殊符号不适应的,如果只是符号的话建议在pattern内添加转义字符

点评

是哦,忘加转义符了,正则还用得不熟练。。  发表于 2012-2-21 21:17

评分

参与人数 1 +10 收起 理由
wcymiss + 10 感谢指正!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-2-21 11:50 | 显示全部楼层
Dj_soo 发表于 2012-2-21 11:49
对哦,我把z给忘记了,弄的不通用了.
虽然我的代码是用一句了,但是其实pattern更长而且在pattern内的判断更 ...

是符号的话,是否一定要加转义字符,还准备又去提问呢{:011:}
回复

使用道具 举报

发表于 2012-2-21 12:17 | 显示全部楼层
爱疯 发表于 2012-2-21 11:50
是符号的话,是否一定要加转义字符,还准备又去提问呢

不一定,但是用的话最好,因为有些是必须要转义的比如"|","\"等在pattern里有特殊含义的都要转义先

点评

能否比如1个?  发表于 2012-2-21 12:21
回复

使用道具 举报

 楼主| 发表于 2012-2-21 12:23 | 显示全部楼层
只比速度的话,40#比29#略慢点。
另外,在x=""时,会报下标越界

点评

我这里试的40楼的只比2楼慢  发表于 2012-2-21 13:31
回复

使用道具 举报

发表于 2012-2-21 12:35 | 显示全部楼层
比如?2L的为"|"的时候你试试?
  1. Sub a()
  2.     Dim x$
  3.     x = "|| a |bc||| ||||def|  |g|| | ||| |||| h|i| ||"
  4.     MsgBox zh(x, "|", ",")
  5. End Sub

  6. Function zh(x, y, z) '转为形如"a,bc,def,g,hi"这样的字符串
  7.     With CreateObject("vbscript.regexp")
  8.         .Global = True
  9.         .Pattern = "(^" & y & "+)|(" & y & "+$)"
  10.         x = .Replace(x, "")
  11.         .Pattern = y & "+"
  12.         zh = .Replace(x, z)
  13.     End With
  14. End Function
复制代码
回复

使用道具 举报

发表于 2012-2-21 12:36 | 显示全部楼层
按照特殊字符的转义改后为:
  1. Sub a()
  2.     Dim x$
  3.     x = "|| a |bc||| ||||def|  |g|| | ||| |||| h|i| ||"
  4.     MsgBox zh(x, "|", ",")
  5. End Sub

  6. Function zh(x, y, z) '转为形如"a,bc,def,g,hi"这样的字符串
  7.     With CreateObject("vbscript.regexp")
  8.         .Global = True
  9.         .Pattern = "(^" & y & "+)|(" & y & "+$)"
  10.         x = .Replace(x, "")
  11.         .Pattern = "" & y & "+"
  12.         zh = .Replace(x, z)
  13.     End With
  14. End Function
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-2-21 13:12 | 显示全部楼层
Dj_soo 发表于 2012-2-21 12:36
按照特殊字符的转义改后为:

对于学习正则表达式,这样是有好处的。

测试后,发现无论是像你这样,还是再分:

匹配开头连续|,替换
匹配结尾连续|,替换

还是影响速度。看来都是被连接符&拖累的
回复

使用道具 举报

发表于 2012-2-21 13:15 | 显示全部楼层
爱疯 发表于 2012-2-21 13:12
对于学习正则表达式,这样是有好处的。

测试后,发现无论是像你这样,还是再分:

额,这个我就没测试过了,不过对于字符串的处理我还是推荐首选正则.
正则的毕竟不需要循环,整体代码看起来会比较清爽,另外大量数据时肯定会快很多.
回复

使用道具 举报

 楼主| 发表于 2012-2-21 13:20 | 显示全部楼层
Dj_soo 发表于 2012-2-21 13:15
额,这个我就没测试过了,不过对于字符串的处理我还是推荐首选正则.
正则的毕竟不需要循环,整体代码看起来 ...

今天和你讨论的这个正则的例子,使我学习到:
为了速度,看起来不爽还是有提速的

除此外,10楼和31楼我改的,只为替换成字符串变量而设的变量,对速度真有提高。这也是让我意外的发现。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 13:02 , Processed in 0.325778 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表