如何替换非括号里的空格?

excuseser 2008-12-19 10:26:11
假设有个字符串 "一切正常 开始 (发言人 小李)"
如何替换掉这个字符串里的空格?但是括号里的空格不能替换。
用正则表达式?谢谢。
...全文
253 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrongzhen 2008-12-22
  • 打赏
  • 举报
回复
本来是问楼主,有没有括号不成对的情况呢 呵呵

看来没有,LZ可以结贴了,Tiger_Zhao的方法已经很好了!!!
Tiger_Zhao 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xrongzhen 的回复:]
有括号不成对的情况吗?
[/Quote]
Function XTrim(s As String) As String
...
Wend
if lLevel <> 0 then msgbox "括号不成对!"
XTrim = sReturn
End Function
Tiger_Zhao 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xrongzhen 的回复:]
有括号不成对的情况吗?
[/Quote]
Function XTrim(s As String) As String
...
Wend
if lLevel = 0 then msgbox "括号不成对!"
XTrim = sReturn
End Function
xrongzhen 2008-12-19
  • 打赏
  • 举报
回复
有括号不成对的情况吗?
Tiger_Zhao 2008-12-19
  • 打赏
  • 举报
回复
Option Explicit

Sub main()
Debug.Print XTrim("一切正常 开始 (发言人 小李)")
Debug.Print XTrim("一切正常 (一切正常 开始 (发言人 小李)) 开始")
Debug.Print XTrim("一切正常 ((发言人 小李) 开始 (发言人 小李) ) 开始")
End Sub

Function XTrim(s As String) As String
Dim sReturn As String, lLen As Long, i1 As Long, i2 As Long
Dim lLevel As Long, iLeft As Long, iRight As Long
lLen = Len(s)
i1 = 1
While i1 <= lLen
iLeft = InStr(i1, s, "(")
If iLeft = 0 Then iLeft = lLen + 1
iRight = InStr(i1, s, ")")
If iRight = 0 Then iRight = lLen + 1
i2 = IIf(iLeft < iRight, iLeft, iRight) '=Min(iLeft,iRight)

If lLevel > 0 Then '括号内
sReturn = sReturn & Mid$(s, i1, i2 - i1)
Else '括号外
sReturn = sReturn & Replace(Mid$(s, i1, i2 - i1), " ", "")
End If

If i2 <= lLen Then
If i2 = iLeft Then
sReturn = sReturn & "("
lLevel = lLevel + 1
Else
sReturn = sReturn & ")"
lLevel = lLevel - 1
End If
End If
i1 = i2 + 1
Wend
XTrim = sReturn
End Function
yachong 2008-12-19
  • 打赏
  • 举报
回复
上面的办法只能处理楼主列出来的数据
如果括号多层嵌套就不行了
yachong 2008-12-19
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim s As String, t As String
Dim i As Long
Dim x() As String
s = "(内部 空格)一切正常 开始 (发言人 小李) (发言人 小李)"
s = Replace(s, "(", "#") '如果原始字符串包含#就不好用了,可以考虑用别的特殊字符
s = Replace(s, ")", "#")
x = Split(s, "#")
For i = 0 To UBound(x) - 1 Step 2
t = t & Replace(x(i), " ", "") & "(" & x(i + 1) & ")"
Next
Debug.Print t
End Sub


7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧