0

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

字符串 =Test----$$$$19****45@@@@ Nothing

干净的字符串 =Test-$19*45@ Nothing

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

我正在使用 vb.net

4

4 回答 4

5

您要做的是创建对任何字符的反向引用,然后删除与该反向引用匹配的以下字符。通常可以使用 pattern (.)\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, "")

编辑:包括的例子

于 2013-01-03T13:31:35.810 回答
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())
于 2013-01-04T17:27:28.270 回答
0

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

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

输出:

Test-$19*45@ Nothing
于 2013-01-03T13:32:35.767 回答
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
于 2013-01-03T13:37:01.613 回答