我正在尝试修剪字符串并删除所有元音和空格以及重复的字符。
这是我正在使用的代码
Function TrimString(strString As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.IgnoreCase = True
.Pattern = "[aeiou\s]"
TrimString = .Replace(strString, vbNullString)
.Pattern = "(.)\1+"
TrimString = .Replace(TrimString, "$1")
End With
End Function
是否有一种方法可以将两种模式组合在一起,而不是分两个步骤进行?
谢谢。
答案 0 :(得分:0)
这将起作用:
With objRegex
.Global = True
.IgnoreCase = True
.Pattern = ".*?([^aeiou\s]).*?"
TrimString = .Replace(TrimString, "$1$1")
End With
我对VBA并不熟悉,但是如果有一种方法可以返回匹配而不是将匹配替换为原始字符串,那么您可以使用以下模式
[^aeiou\s]
并返回:
$&$&
答案 1 :(得分:0)
您有两个替补:
[aeiou\s]
个匹配项,例如niarararrrrreghtatt
变成nrrrrrrrghttt
nrrrrrrrghttt
变成nrght
。这意味着,您需要将第一个模式匹配为单独的替代项和相同字符之间的“填充符”。
您可能使用的模式是
.pattern = "[aeiou\s]+|([^aeiou\s])(?:[aeiou\s]*\1)+"
TrimString = .Replace(strString, "$1")
请参见this regex demo。
详细信息
[aeiou\s]+
-1个以上的元音或空格字符|
-或([^aeiou\s])
-捕获第1组:元音或空格字符以外的任何字符(?:[aeiou\s]*\1)+
-1次或多次出现:
[aeiou\s]*
-0个以上的元音或空格字符\1
-反向引用第1组,其值请注意,.
更改为[^aeiou\s]
,因为相反的内容已通过第一个备用分支进行了处理。