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 1Moż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