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

Regex 如何从字符串中删除双字符和空格,regex,vb.net,string,double,character,Regex,Vb.net,String,Double,Character,请告诉我如何从下面的字符串中删除双空格和字符 字符串=Test--$$$19****45@@@Nothing 干净字符串=Test-$19*45@Nothing 我使用过regex“\s+”,但它只是删除了双空格,我也尝试过regex的其他模式,但它太复杂了。。。请帮帮我 我正在使用vb.net您要做的是创建对任何字符的反向引用,然后删除与该反向引用匹配的以下字符。通常可以使用模式()\1+,该模式应仅替换为反向引用(一次)。这取决于编程语言的具体实现方式 Dim text As String

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

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

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

我使用过regex
“\s+”
,但它只是删除了双空格,我也尝试过regex的其他模式,但它太复杂了。。。请帮帮我


我正在使用vb.net

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

Dim result As String=New Regex((?您要做的是创建对任何字符的反向引用,然后删除与该反向引用匹配的以下字符。通常可以使用模式
()\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@@@uaa&&&

Dim result As String=New Regex(“(?这里有一种perl方法,可以用一个字符替换所有多个非单词字符:

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

Test-$19*45@ Nothing

以下是一种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

下面是它在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

要获得更快的备选方案,请尝试:

        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())
Dim text As String=“Test@@@uaa&&&
将sb调整为新的StringBuilder(文本长度)
将lastChar作为Char
将每个c作为文本中的字符
如果c lastChar那么
某人(c)
lastChar=c
如果结束
下一个
Console.WriteLine(sb.ToString())

要获得更快的备选方案,请尝试:

        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())
Dim text As String=“Test@@@uaa&&&
将sb调整为新的StringBuilder(文本长度)
将lastChar作为Char
将每个c作为文本中的字符
如果c lastChar那么
某人(c)
lastChar=c
如果结束
下一个
Console.WriteLine(sb.ToString())

你用哪种语言编程?并非所有的正则表达式引擎都是平等创建的。在这里你可以找到anserwers,我使用vb.net,对正则表达式一无所知,我正在尝试学习它……如果你给我一个示例模式,这将对我帮助很大。提前谢谢。你用哪种语言编程?不是所有的正则表达式引擎都是cr在这里你可以找到anserwers我在使用vb.net,对RegEx一无所知,我正在尝试学习它…如果你给我一个示例模式,这将对我有很大帮助。提前谢谢。谢谢Patrickdev…我在使用vb.net,对RegEx一无所知,我正在尝试学习它…如果你给我一个示例模式,我会的这将对我有很大帮助。提前谢谢。@Ashi:我已经包括了一些示例,说明如何在VB.NET中实现这一点。非常感谢Patrickdev…但它正在删除所有双字符。我不想删除alpha的双字符。我只想删除$,-,@,*,等等。很抱歉,我没有正确地发布我的问题。@Ashi:只需替换
[^A-Za-z0-9]
匹配。这是一个字符类,它匹配任何不匹配的字符(该
^
否定它),可以是大写字母、小写字母或数字。因此,它将删除任何其他字符。您的模式将类似于
([^A-Za-z0-9])\1+
。谢谢Patrickdev…我正在使用vb.net,对RegEx一无所知,我正在尝试学习它…如果你给我一个示例模式,这将对我有很大帮助。提前谢谢。@Ashi:我已经在vb.net中提供了一些示例来演示如何使用它。非常感谢Patrickdev…但它正在删除所有我不想删除的双字符删除字母的两个字符。我只是想删除$,-,@,*,等等。很抱歉,我没有正确地发布我的问题。@Ashi:只需将
替换为
[^A-Za-z0-9]
。这是一个字符类,它匹配任何不匹配的字符(
^
否定它)大写字母、小写字母或数字。因此,它将删除任何其他内容。您的模式将类似于
([^A-Za-z0-9])\1+
。谢谢,我在一个大数据表的不同列上做了10-15性能测试,总是发现字符串函数比正则表达式快…似乎我必须使用字符串函数以更好的方式存档我的目标。请给我你的建议。再次谢谢。谢谢,我在一个大数据表的不同列上做了10-15性能测试能够并且总是找到字符串函数比正则表达式更快…似乎我必须使用字符串函数以更好的方式存档我的目标。请给我你的建议。再次感谢。