删除元音,空格和重复字符

时间:2018-09-29 18:55:27

标签: regex vba excel-vba

我正在尝试修剪字符串并删除所有元音和空格以及重复的字符。

这是我正在使用的代码

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

是否有一种方法可以将两种模式组合在一起,而不是分两个步骤进行?

谢谢。

2 个答案:

答案 0 :(得分:0)

这将起作用:

With objRegex
    .Global = True
    .IgnoreCase = True
    .Pattern = ".*?([^aeiou\s]).*?"
    TrimString = .Replace(TrimString, "$1$1")
End With

我对VBA并不熟悉,但是如果有一种方法可以返回匹配而不是将匹配替换为原始字符串,那么您可以使用以下模式

[^aeiou\s]

并返回:

$&$&

答案 1 :(得分:0)

您有两个替补:

  1. 删除[aeiou\s]个匹配项,例如niarararrrrreghtatt变成nrrrrrrrghttt
  2. 用第一次出现的字符替换每个相同字符的块会将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],因为相反的内容已通过第一个备用分支进行了处理。