请让我如何从下面的字符串中删除双空格和字符。
字符串 =Test----$$$$19****45@@@@ Nothing
干净的字符串 =Test-$19*45@ Nothing
我使用了正则表达式"\s+"
,但它只是删除了双空格,我尝试了其他正则表达式模式,但它太复杂了......请帮助我。
我正在使用 vb.net
您要做的是创建对任何字符的反向引用,然后删除与该反向引用匹配的以下字符。通常可以使用 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, "")
编辑:包括的例子
如需更快的替代方案,请尝试:
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())
这是一种仅用一个替换所有多个非单词字符的 perl 方法:
my $String = 'Test----$$$$19****45@@@@ Nothing';
$String =~ s/(\W)\1+/$1/g;
print $String;
输出:
Test-$19*45@ Nothing
这是它在 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