Programing

문자열에서 모든 특수 문자를 제거하는 정규식?

lottogame 2020. 11. 30. 07:40
반응형

문자열에서 모든 특수 문자를 제거하는 정규식?


저는 정규식을 완전히 사용할 수 없으므로 정규식을 사용하면 가장 잘 해결 될 것이라고 생각하는 문제에 대한 도움이 필요합니다.

C #에 문자열 목록이 있습니다.

List<string> lstNames = new List<string>();
lstNames.add("TRA-94:23");
lstNames.add("TRA-42:101");
lstNames.add("TRA-109:AD");

foreach (string n in lstNames) {
  // logic goes here that somehow uses regex to remove all special characters
  string regExp = "NO_IDEA";
  string tmp = Regex.Replace(n, regExp, "");
}

목록을 반복하고 특수 문자없이 각 항목을 반환 할 수 있어야합니다. 예를 들어, 항목 1은 "TRA9423", 항목 2는 "TRA42101", 항목 3은 TRA109AD입니다.

나를 위해 이것을 수행 할 수있는 정규식이 있습니까?

또한 목록에는 4000 개 이상의 항목이 포함되어 있으므로 가능하면 효율적이고 빠르게 검색하고 교체해야합니다.

편집 : 나는 az, AZ 및 0-9 옆의 모든 문자가 내 상황에서 특별하다는 것을 지정해야했습니다.


특수 문자의 정의에 따라 다릅니다. 블랙리스트가 아닌 화이트리스트가 대부분의 상황에서 최선의 접근 방식임을 알았습니다.

tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");

다음 두 항목은 동일한 문자열로 변환되어 구별 할 수 없으므로 현재 접근 방식에주의해야합니다.

"TRA-12:123"
"TRA-121:23"

이렇게해야합니다.

[^a-zA-Z0-9]

기본적으로 영숫자가 아닌 모든 문자와 일치합니다.


[^a-zA-Z0-9] 영숫자가 아닌 문자와 일치하는 문자 클래스입니다.

또는 [^\w\d]동일한 작업을 수행합니다.

용법:

string regExp = "[^\w\d]";
string tmp = Regex.Replace(n, regExp, "");

당신이 사용할 수있는:

string regExp = "\\W";

이것은 Daniel의 " [^a-zA-Z0-9]"에 해당합니다.

\ W는 단어가 아닌 문자와 일치합니다. 유니 코드 범주와 동일합니다 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}].


"특수 문자"에 대한 정의에 따라 "[^ a-zA-Z0-9]"가 트릭을 할 수있을 것 같습니다. 소문자, 대문자 또는 숫자가 아닌 모든 것을 찾을 수 있습니다.


tmp = Regex.Replace(n, @"\W+", "");

\w문자, 숫자 및 밑줄과 일치 \W하며 부정 버전입니다.


내 목적을 위해 모든 영어 ASCII 문자를 원했기 때문에 이것이 작동했습니다.

html = Regex.Replace(html, "[^\x00-\x80]+", "")

Regex를 사용하지 않으려면 다른 옵션은

char.IsLetterOrDigit

이것을 사용하여 문자열의 각 문자를 반복하고 true 인 경우에만 반환 할 수 있습니다.


public static string Letters(this string input)
{
    return string.Concat(input.Where(x => char.IsLetter(x) && !char.IsSymbol(x) && !char.IsWhiteSpace(x)));
}

참고 URL : https://stackoverflow.com/questions/3303420/regex-to-remove-all-special-characters-from-string

반응형