모든 종류의 char을 포함 할 수있는 문자열이 있습니다. 내가 원하는 것 :어떻게 문자열을이 규칙으로 바꿀 수 있습니까?
- 악센트 부호를 비 액센트 문자로 교체하십시오 (예 : a는 a, é => e와 같아야 함).
- 문자열에는 a-zA-Z, 숫자 및
-
;
어떻게하면됩니까?
모든 종류의 char을 포함 할 수있는 문자열이 있습니다. 내가 원하는 것 :어떻게 문자열을이 규칙으로 바꿀 수 있습니까?
-
;어떻게하면됩니까?
다음은 당신을 위해 작동합니다 :
는// 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, "");
문자열의 모든 문자에 액세스 할 수 있습니다. U는 실제 char를 받아 메소드에 보냅니다. 이 방법에서는 if -lse 또는 case 스위치를 사용합니다. 그것은 당신의 규칙이 될 것입니다. 규칙 중 하나에서 char을 허용하면 해당 char의 대체 값을 반환합니다.
이 기능은 모든 비 허용 문자를 제거하고 악센트를 대체합니다.
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 "'로 변환합니다. ''나 ''로 번역하지 못한다. – Richard
허용되는 문자 만 표시하도록 고정 ... 여전히 사용자가 누가 강조 문자를 변경하는지 알지 못합니다. 다른 사람들은 당신에게 더 좋은 대답을 할 수 있습니다. –
다시 이번에는 악센트 부호가있는 문자를 바꿉니다. –
있습니다 ("기본"문자와 하나 개 이상의 결합 문자로 악센트 부호가있는 문자를 분할 NormalizationForm.FormD
에) 다음 이외의 모든 문자 문자를 필터링 string.Normalize
시도 할 수 있습니다.
편집 :
string s = "éäï";
var ca = s.Normalize(NormalizationForm.FormD)
.ToCharArray()
.Where(c => c >= 'a' && c <= 'z');
// ca contains eai now
당신이 A-Z하지 않은 문자, A-Z, 숫자에 일이하고 싶어 - 또는 악센트 문자? –
문자열에서 삭제해야합니다. – markzzz
@markzzz : 그래서 e '=> e는 의미합니까? 대체가 아닌가? – Tigran