1

いくつかの奇妙な記号を含むデータを扱っています (他の言語から)

正規表現を使用するマクロを Excel で作成しています。文字列に 1x2 が含まれている場合、「1x2」と一致させたいと考えています。

4

3 に答える 3

1

正規表現で\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
  • 1x2
  • 1×2
  • 1xâ€2
于 2013-09-15T18:11:35.487 に答える
1

このようなものは、目的の文字列コンポーネントを返します。

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
于 2013-09-16T02:29:40.317 に答える
-1

を使用できます1.x.2。それらの間に文字が存在するという保証がない場合は、動作する1.?x.?2はずです。

于 2013-09-15T17:48:37.347 に答える