いくつかの奇妙な記号を含むデータを扱っています (他の言語から)
正規表現を使用するマクロを Excel で作成しています。文字列に 1x2 が含まれている場合、「1x2」と一致させたいと考えています。
正規表現で\u####を使用して、Unicode 番号で文字を照合できます。ここで、 ####は 16 進数の Unicode 番号です。â の 16 進 Unicode は 00E2 であり、€ の 16 進 Unicode は 20AC であるため、この正規表現は
1\u00E2\u20ACx\u00E2\u20AC2
1â€xâ€2に一致します。
それはあなたが探していたものですか?「文字列に1 x x 2が含まれている場合、'1 x 2' に一致する」という意味が正確にはわかりません。シーケンス1'x'2自体に一致させたいと言っていますか(これは上記の正規表現が行うことです)、または1'x'2を含む文字列内の1x2に一致させたいと言っていますか (これはあなたの言葉遣いが暗示しているようです) 、しかしそれはあなたの言いたいこととは違うと感じています)、または 1â€xâ€2 を 1x2 に置き換えたいですか?
編集:実際には、質問のタイトルに基づいて、 「間に他の文字がある可能性があります」と言う場合、この正規表現が必要になるため、これらの「他の文字」はオプションになります:
1(\u00E2\u20AC)?x(\u00E2\u20AC)?2
これは、次のいずれかに一致します。
このようなものは、目的の文字列コンポーネントを返します。
1 や 2 ではなく、数値の一致が実際に必要であると想定しました。に変更"(\d).*?(x).*?(\d)"
しない場合"(1).*?(x).*?(2)"
Dim objRegex As Object
Dim strIn As String
strIn = "1â€xâ€2"
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "(\d).*?(x).*?(\d)"
If .test(strIn) Then MsgBox .Replace(strIn, "$1$2$3")
End With
を使用できます1.x.2
。それらの間に文字が存在するという保証がない場合は、動作する1.?x.?2
はずです。