/ / Excel VBA Regex - jak dopasować 3 znaki, gdy mogą występować inne znaki pomiędzy - regex, excel, vba

Excel VBA Regex - jak dopasować 3 znaki, gdy między nimi mogą występować inne znaki - regex, excel, vba

Zajmuję się niektórymi danymi, które mają dziwne symbole (z jakiegoś innego języka)

Piszę makro w programie excel, które używa wyrażeń regularnych, i chcę dopasować "1x2", gdy ciąg zawiera 1 x 2

Odpowiedzi:

-1 dla odpowiedzi nr 1

Możesz użyć 1.x.2. Jeśli nie ma gwarancji, że tam będzie być postaciami między nimi, 1.?x.?2 powinno działać.


1 dla odpowiedzi nr 2

Możesz użyć u #### w wyrażeniu regularnym dopasowującym znak do jego numeru Unicode, gdzie #### jest numerem Unicode na hex. Kod szesnastkowy Unicode dla â jest 00E2, a heksadecymalny Unicode dla € to 20AC, więc to wyrażenie regularne

1u00E2u20ACxu00E2u20AC2

będzie pasować 1 x 2 €.

Czy tego właśnie szukałeś? Nie jestem pewien dokładnie, co masz na myśli przez "mecz "1x2", gdy ciąg znaków zawiera 1â € "2â €" Chcesz powiedzieć, że chcesz dopasować sekwencję? 1 x 2 € sam (co zrobi powyższe wyrażenie) lub dopasuj 1x2 w ciągach zawierających 1 x 2 € gdzieś indziej (co sugeruje twoje sformułowanie, ale mam wrażenie, że "nie o to ci chodzi") lub, że chcesz zastąpić 1 x 2 € z 1x2?


EDYTOWAĆ: Właściwie, na podstawie tytułu pytania, gdzie mówisz "tam może być innymi znakami pomiędzy ", będziesz chciał tego wyrażenia regularnego, co czyni te" inne znaki "opcjonalne:

1(u00E2u20AC)?x(u00E2u20AC)?2

To będzie pasować do któregokolwiek z poniższych:

  • 1 x 2 €
  • 1x2
  • 1 € x 2
  • 1xâ € 2

1 dla odpowiedzi nr 3

Coś takiego przywróci pożądane komponenty ciągów.

Założę się, że zamiast 1 lub 2 faktycznie chciałeś jakiegokolwiek dopasowania liczbowego. Jeśli nie, zmień "(d).*?(x).*?(d)" do "(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