programing

문자열에서 영숫자가 아닌 문자(공백 포함)를 제거하려면 어떻게 해야 합니까?

padding 2023. 8. 21. 20:57
반응형

문자열에서 영숫자가 아닌 문자(공백 포함)를 제거하려면 어떻게 해야 합니까?

바꾸기를 사용하여 C#의 문자열과 빈 공간에서 영숫자가 아닌 문자를 제거하려면 어떻게 해야 합니까?

a-z, A-Z, 0-9 및 그 이상("공간"도 포함하지 않음)을 유지하고 싶습니다.

"Hello there(hello#)".Replace(regex-i-want, "");

주어야 합니다

"Hellotherehello"

난 시도했다."Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", "");하지만 공간은 남아 있습니다.

정규식에서 공백이 일치하지 않도록 제외되었으며 사용하지 않았습니다.Regex.Replace()내가 완전히 간과했던 것은...):

result = Regex.Replace("Hello there(hello#)", @"[^A-Za-z0-9]+", "");

효과가 있을 것입니다.+에서는 영숫자가 아닌 연속된 문자를 하나씩 일치시키는 대신 한 번에 둘 이상의 문자를 일치시켜 정규식을 좀 더 효율적으로 만듭니다.

ASCII가 아닌 문자/숫자도 유지하려면 다음 정규식을 사용합니다.

@"[^\p{L}\p{N}]+"

어느 쪽이 떠나는가

BonjourmesélèvesGutenMorgenliebeSchüler

대신에

BonjourmeslvesGutenMorgenliebeSchler

Linkq를 사용하여 필요한 문자를 필터링할 수 있습니다.

  String source = "Hello there(hello#)";

  // "Hellotherehello"
  String result = new String(source
    .Where(ch => Char.IsLetterOrDigit(ch))
    .ToArray());

또는

  String result = String.Concat(source
    .Where(ch => Char.IsLetterOrDigit(ch)));  

따라서 정규 표현이 필요하지 않습니다.

또는 다음과 같은 작업도 수행할 수 있습니다.

    public static string RemoveNonAlphanumeric(string text)
    {
        StringBuilder sb = new StringBuilder(text.Length);

        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];
            if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                sb.Append(text[i]);
        }

        return sb.ToString();
    }

용도:

string text = SomeClass.RemoveNonAlphanumeric("text LaLa (lol) á ñ $ 123 ٠١٢٣٤");

//text: textLaLalol123

위에서 실수한 것은 Replace를 잘못 사용한 것입니다. (Regex를 사용하지 않습니다. CodeInChaos 감사합니다.)

다음 코드는 지정된 작업을 수행해야 합니다.

Regex reg = new Regex(@"[^\p{L}\p{N}]+");//Thanks to Tim Pietzcker for regex
string regexed = reg.Replace("Hello there(hello#)", "");

이것은 다음을 제공합니다.

regexed = "Hellotherehello"

확장 방법으로 대체 작업:

public static class StringExtensions
{
    public static string ReplaceNonAlphanumeric(this string text, char replaceChar)
    {
        StringBuilder result = new StringBuilder(text.Length);

        foreach(char c in text)
        {
            if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
                result.Append(c);
            else
                result.Append(replaceChar);
        }

        return result.ToString();
    } 
}

테스트:

[TestFixture]
public sealed class StringExtensionsTests
{
    [Test]
    public void Test()
    {
        Assert.AreEqual("text_LaLa__lol________123______", "text LaLa (lol) á ñ $ 123 ٠١٢٣٤".ReplaceNonAlphanumeric('_'));
    }
}
var text = "Hello there(hello#)";

var rgx = new Regex("[^a-zA-Z0-9]");

text = rgx.Replace(text, string.Empty);

Regex를 사용하여 문자열에서 모든 문자를 제거하려면 다음 regex를 사용합니다.교체하다

([^A-Za-z0-9\s])

.Net 4.0에서는 IsNullOr을 사용할 수 있습니다.소위 공백 문자를 제거하는 문자열 클래스의 공백 메서드입니다.여기를 보세요. http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx . 하지만 @CodeInChaos가 지적했듯이 문자와 숫자로 간주될 수 있는 문자가 많이 있습니다.A-Za-z0-9만 찾으려면 정규식을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/8779189/how-do-i-strip-non-alphanumeric-characters-including-spaces-from-a-string

반응형