2012-12-20 16 views
5

Mój Regeks usuwa cały numeryczny (0-9) w ciągu znaków. Nie rozumiem, dlaczego wszystkie numery są zastępowane przez _Wypis regex C# numery są teraz podkreślenia

EDIT: Rozumiem, że moja „_” regex wzór zmienia się znaki podkreślenia. Ale nie dlaczego liczby!

Czy ktoś może mi pomóc? Muszę usunąć tylko jak wszystkie znaki specjalne.

See regex tutaj:

string symbolPattern = "[[email protected]#$%^&*()-=+`~{}'|]"; 
Regex.Replace("input here 12341234" , symbolPattern, "_"); 

Output: "input here ________" 

Odpowiedz

8

Problemem jest twój wzór wykorzystuje odrobinę środkiem, który działa jako zakres znaków ASCII od ) do =. Oto podział:

  • ): 41
  • 1: 49
  • =: 61

Jak widać, numery zaczynają się od 49, a spada w przedziale od 41-61 , więc są dopasowane i zastąpione.

Trzeba umieścić - albo na początku lub na końcu klasy postaci, aby była ona dopasowana dosłownie zamiast działać jako działy

"[[email protected]#$%^&*()=+`~{}'|]" 
+1

Dzięki, dla wszystkich. Muszę wybrać jeden jako odpowiedź i ten jest najbardziej szczegółowy, który wyjaśnił problem. Dzięki za wkład. – Rob

1

Musisz uciec swoich znaków specjalnych w regex. Na przykład * jest dopasowaniem wieloznacznym. Zobacz, co niektóre z tych znaków specjalnych oznaczają dla Twojego meczu.

+1

Prawidłowe dla ucieczki (szczególnie dla "-"), ale "*" oznacza "0 lub więcej", a nie "dowolny znak". –

+0

@RowlandShaw: edytowane – RonaldBarzell

4

trzeba uciec - ponieważ sekwencja [)-=] zawiera cyfry

string symbolPattern = "[[email protected]#$%^&*()\-=+`~{}'|]"; 
2

przesunąć - na końcu listy tak jest postrzegana jako dosłowna:

"[[email protected]#$%^&*()=+`~{}'|-]" 

Albo do przodu:

"[[email protected]#$%^&*()=+`~{}'|]" 

W obecnej wersji będzie pasować do wszystkich znaków w zakresie )-=, który zawiera wszystkie cyfry.

0

Nie użyłem C#, ale zazwyczaj znak "*" jest również znakiem kontrolnym, który wymagałby ucieczki.

Poniższy mecze całą linię dowolnych znaków, chociaż „^” i „$” są pewne co zbędne:

^.*$ 

Dopasowuje dowolną liczbę znaków „A”, które pojawiają się w ciąg znaków:

A* 

The "Sowa" książki z oreilly jest to, czego naprawdę potrzebujesz, aby zbadać to:

http://shop.oreilly.com/product/9780596528126.do?green=B5B9A1A7-B828-5E41-9D38-70AF661901B8&intcmp=af-mybuy-9780596528126.IP

+0

Jest metaznakiem regex i masz rację, że pasuje do dowolnej liczby razy, jednak nie jest tak, gdy występuje w klasie znaków. To dosłownie pasuje do gwiazdki: '[*]'. –