2017-05-03 21 views
0

私は文字列からすべての非文字とスペースを除外するために.NET Regex.Replace(VB.NETの例)を使用しようとしています。たとえば、以下の文字列sでは、パターン[^ A-z]は空白以外のすべての非アルファベットを削除するべきだと考えました。しかし、それは動作していないようです。私は間違って何をしていますか?ここで.net regex.replaceキャレット文字を除外しないでください

Sub Try_Regex_Remove_Caret_Symbol() 
'^(caret) character is not being removed via exclusion 
Dim s As String, p As String 
s = "I have a caret which I want removed ^[email protected]#!&" 
p = "[^A-z ]" 
Console.WriteLine("Input : " & s) 
Console.WriteLine("Output: " & Regex.Replace(s, p, "")) 
' Input : I have a caret which I want removed ^[email protected]#!& 
' Output: I have a caret which I want removed^
' Note that the caret (^) is not removed as expected 
End Sub 

答えて

2

は、アスキーテーブルには、あなたがキャレット(^)はAとZの間にあることがわかります

0 1 2 3 4 5 6 7 8 9 A B C D E F 

    2  ! " # $ % & ' () * + , - ./

    3 0 1 2 3 4 5 6 7 8 9 : ; <=> ? 

    4 @ A B C D E F G H I J K L M N O 

    5 P Q R S T U V W X Y Z [ \ ]^_ 

    6 ` a b c d e f g h i j k l m n o 

    7 p q r s t u v w x y z { | } ~ 

です。ご希望の効果を取得するには、必要があります

p = [^A-Za-z ] 
+0

はそれを手に入れました。それは理にかなっている。ありがとうございました。 –

+0

Regexの仕様がASCIIの順序に依存していることはわかりませんでした。機能的には理にかなっていないようです。大部分の人間の数学者が "AからZまたはスペースにないすべてのもの"を指定した場合(スペックがあいまいであることがわかります)、おそらく、特別な文字はそのASCIIテーブル。 Perlがこのように動作するので、初期のPCRE実装の奇抜であるように見えます。 –

0

は、交換のために、以下の正規表現を使用します。

[^A-Za-z ] 

問題はキャレットは、範囲A-Za-zの間に、したがって、あなたが除いているということですそれは[^A-z]との交換からです。

全コード:

s = "I have a caret which I want removed ^[email protected]#!&" 
p = "[^A-Za-z ]" 
Console.WriteLine("Input : " & s) 
Console.WriteLine("Output: " & Regex.Replace(s, p, "")) 

ここにデモ:

Rextester

+0

ありがとうございました。 –

関連する問題