1

我正在处理一些具有一些奇怪符号的数据(来自其他语言)

我在 excel 中编写一个使用正则表达式的宏,当字符串包含 1â€xâ€2 时,我想匹配“1x2”

4

3 回答 3

1

您可以在正则表达式中使用\u####来匹配字符的 Unicode 编号,其中####是十六进制的 Unicode 编号。â 的十六进制 Unicode 是 00E2,€ 的十六进制 Unicode 是 20AC,所以这个正则表达式

1\u00E2\u20ACx\u00E2\u20AC2

将匹配1â€xâ€2

那是你要找的吗?我不确定您所说的“当字符串包含1â€xâ€2时匹配'1x2' ”是什么意思。你是说你想匹配序列1â€xâ€2本身(这就是上面的正则表达式会做的),还是在其他地方匹配包含1â€xâ€2的字符串中的1x2(这就是你的措辞似乎暗示的意思,但我感觉这不是你的意思),或者你想用1x2替换1â€xâ€2


编辑:实际上,根据问题的标题,您说“中间可能有其他字符”,您需要这个正则表达式,这使得这些“其他字符”是可选的:

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 回答