2012-04-15 6 views
1

모든 종류의 char을 포함 할 수있는 문자열이 있습니다. 내가 원하는 것 :어떻게 문자열을이 규칙으로 바꿀 수 있습니까?

  1. 악센트 부호를 비 액센트 문자로 교체하십시오 (예 : a는 a, é => e와 같아야 함).
  2. 문자열에는 a-zA-Z, 숫자 및 -;

어떻게하면됩니까?

+0

당신이 A-Z하지 않은 문자, A-Z, 숫자에 일이하고 싶어 - 또는 악센트 문자? –

+0

문자열에서 삭제해야합니다. – markzzz

+0

@markzzz : 그래서 e '=> e는 의미합니까? 대체가 아닌가? – Tigran

답변

2

다음은 당신을 위해 작동합니다 :

// Remove all accents 
var bytes = Encoding.GetEncoding("Cyrillic").GetBytes(text); 
text = Encoding.ASCII.GetString(bytes); 

// Remove all unwanted characters 
var regex = new Regex("[^a-zA-Z0-9-]"); 
text = regex.Replace(text, ""); 
+0

GetEncoding ("키릴 문자")의 역할은 무엇입니까? 키릴 문자에는 악센트 부호가 없습니다. – Bakudan

+0

사실 사실, 나는 또한 왜 그것이 효과가 있는지 이해할 수 없다. 또한 with? – markzzz

+0

이 코드는'substitute *'e''가'e'로 생각하지 않습니다. 사실 OP가 묻기 때문입니다 ... – Tigran

-1

문자열의 모든 문자에 액세스 할 수 있습니다. U는 실제 char를 받아 메소드에 보냅니다. 이 방법에서는 if -lse 또는 case 스위치를 사용합니다. 그것은 당신의 규칙이 될 것입니다. 규칙 중 하나에서 char을 허용하면 해당 char의 대체 값을 반환합니다.

-1

이 기능은 모든 비 허용 문자를 제거하고 악센트를 대체합니다.

private string FormatStringToAllowableCharacters(string inString) { 
     string returnString; 
     returnString = inString.Replace("é","e"); 
     returnString = returnString.Replace("ä","a"); 
     returnString = returnString.Replace("ï","i"); 
    returnString = Regex.Replace(returnString, "[^a-zA-Z0-9-]", ""); 
     return returnString; 
    } 
+0

이것은 질문의 일부가 아닌''''''0 "'로 변환합니다. ''나 ''로 번역하지 못한다. – Richard

+0

허용되는 문자 만 표시하도록 고정 ... 여전히 사용자가 누가 강조 문자를 변경하는지 알지 못합니다. 다른 사람들은 당신에게 더 좋은 대답을 할 수 있습니다. –

+0

다시 이번에는 악센트 부호가있는 문자를 바꿉니다. –

2

있습니다 ("기본"문자와 하나 개 이상의 결합 문자로 악센트 부호가있는 문자를 분할 NormalizationForm.FormD에) 다음 이외의 모든 문자 문자를 필터링 string.Normalize 시도 할 수 있습니다.

편집 :

string s = "éäï"; 
var ca = s.Normalize(NormalizationForm.FormD) 
      .ToCharArray() 
      .Where(c => c >= 'a' && c <= 'z'); 
// ca contains eai now 
+0

@ 리차드 : 저의 답변에 _was_가 이미 있습니다. – Vlad

+0

Vald, 사과 (더 명확하고 투표 변경 허용 편집). – Richard

+0

@ 리차드 : 편집에 감사드립니다. 기본 정규화 양식으로 작동하지 않습니다. – Vlad

관련 문제