문자열에서 영숫자가 아닌 문자(공백 포함)를 제거하려면 어떻게 해야 합니까?
바꾸기를 사용하여 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
'programing' 카테고리의 다른 글
UIButton 제목/텍스트를 프로그래밍 방식으로 업데이트할 수 있습니까? (0) | 2023.08.21 |
---|---|
사이트가 HTTPS이지만 ERR_CLEARTEXT_NOT_PERMITED를 표시하는 웹 보기 (0) | 2023.08.21 |
파워셸에서 속성 파일 읽기 (0) | 2023.08.21 |
java.sql.SQL 예외:잘못된 열 이름 (0) | 2023.08.21 |
E: gnupg, gnupg2 및 gnupg1이 설치되어 있지 않은 것 같습니다. 그러나 이 작업을 수행하려면 둘 중 하나가 필요합니다. (0) | 2023.08.21 |