如何从字符串中删除双字符和空格

时间:2013-01-03 13:28:32

标签: regex vb.net string double character

请告诉我如何从下面的字符串中删除双重空格和字符。

String = Test----$$$$19****45@@@@ Nothing

Clean String = Test-$19*45@ Nothing

我使用了正则表达式"\s+",但它只删除了双空格,我尝试了其他正则表达式,但它太复杂了......请帮助我。

我正在使用vb.net

4 个答案:

答案 0 :(得分:5)

您要做的是创建对任何字符的反向引用,然后删除与该反向引用匹配的以下字符。通常可以使用模式(.)\1+,它应该仅用反向引用(一次)替换。它取决于编程语言如何完成。

Dim text As String = "Test@@@_&aa&&&"
Dim result As String = New Regex("(.)\1+").Replace(text, "$1")

result现在将包含Test@_&a&。或者,您可以使用外观来不首先删除该反向引用:

Dim text As String = "Test@@@_&aa&&&"
Dim result As String = New Regex("(?<=(.))\1+").Replace(text, "")

编辑包含的示例

答案 1 :(得分:1)

为了更快的替代尝试:

        Dim text As String = "Test@@@_&aa&&&"

        Dim sb As New StringBuilder(text.Length)
        Dim lastChar As Char
        For Each c As Char In text
            If c <> lastChar Then
                sb.Append(c)
                lastChar = c
            End If
        Next

        Console.WriteLine(sb.ToString())

答案 2 :(得分:0)

这是一种perl方法,只用一个替换所有多个非单词字符:

my $String = 'Test----$$$$19****45@@@@ Nothing';
$String =~ s/(\W)\1+/$1/g;
print $String;

<强>输出:

Test-$19*45@ Nothing

答案 3 :(得分:0)

以下是Java的外观......

String raw = "Test----$$$$19****45@@@@ Nothing";
String cleaned = raw.replaceAll("(.)\\1+", "$1");
System.out.println(raw);
System.out.println(cleaned);

打印

Test----$$$$19****45@@@@ Nothing
Test-$19*45@ Nothing