2016-09-15 3 views
2

すべての小文字を削除しようとしていますが、VBScriptはすべてのアンダースコア、小文字、および数字を削除しています。小文字だけを取り出し、他の文字を削除しないようにするにはどうすればよいですか?アンダースコアと数字の削除を避ける

With CreateObject("VBScript.RegExp") 
    .Pattern = "[^A-Z ]" 
    .Global = True 
    For Each cell In Worksheets("Sheet1").Range("C1:C25") 
     If Not IsEmpty(cell.Value) Then _ 
      cell.Value = Application.Trim(.Replace(cell.Value, "")) 
    Next cell 
End With​ 

答えて

6

小文字の正規表現は[a-z]です。

あなたの正規表現 - [^A-Z ] - 大文字とスペースではない文字にマッチするので、小文字よりもはるかに多く一致します。

あなたは文字を削除しているので、あなたはより良い1回以上の繰り返しに一致するように[a-z]+数量詞を追加したい:

.Pattern = "[a-z]+" 
+0

ただし、大文字小文字の連続した大文字の小文字が必要です。通常の状況下では、その違いが最大でも数ミリ秒になると思います。 –

+2

@AnsgarWiechers:確かに、パフォーマンスの向上は実体的ではありません。正規表現エンジンでは、シーケンスの各文字を停止して再開する必要がないため、正規表現エンジンの方が簡単です。 –

+1

助けをありがとう – johndoe253

0
.Pattern = "[a-z]+" 

はあなたが後にしている何をすべき、これはすべて小文字と一致する必要があります手紙あなたが他の道を行くと、すべてのことがキャプチャされていていることを確認したい場合は欲張って、代わりにあなたができる数字と_です:

.Pattern = "[0-9_A-Z]+" 

0-9、A-Z、_などと一致するものはありません

+0

申し訳ありませんが、IDEの外で正規表現を作成しました(VSがインストールされていないため) –

関連する問題