请告诉我如何从下面的字符串中删除双重空格和字符。
String = Test----$$$$19****45@@@@ Nothing
Clean String = Test-$19*45@ Nothing
我使用了正则表达式"\s+"
,但它只删除了双空格,我尝试了其他正则表达式,但它太复杂了......请帮助我。
我正在使用vb.net
答案 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