Excel VBA正则expression式 – 如何匹配3个字符之间可能有其他字符

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

即时通讯在使用正则expression式的Excel中写一个macros,我想匹配“1×2”时,该string包含1“x 2

你可以使用1.x.2 。 如果不能保证它们之间会有字符, 1.?x.?2 . 1.?x.?2应该可以工作。

您可以在正则expression式中使用\ u ####以通过Unicode编号匹配一个字符,其中####是hex中的Unicode编号。 hex的Unicode是00E2,hex的Unicode是20AC,所以这个正则expression式

 1\u00E2\u20ACx\u00E2\u20AC2 

将匹配1“x 2”

那是你在找什么? 当string包含 1“x2”时,我不确定“ match 1×2”是什么意思。 你是说你想匹配序列1?2本身(这是正则expression式将做什么),或匹配1×2的string包含1?2在别的地方(这是你的措辞似乎暗示,但我有这样的感觉,而不是你的意思),或者你想用1×2replace12


编辑:其实,根据问题的标题,你说“ 可能有其他字符之间”,你会想要这个正则expression式,这使得“其他字符”可选:

 1(\u00E2\u20AC)?x(\u00E2\u20AC)?2 

这将匹配以下任何一项:

  • 图1A€XA€2
  • 1×2
  • 1A€X2
  • 1XA€2

像这样的东西将返回所需的string组件。

我假设,而不是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