Replaceで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]+", "");
動作するはずです。 +
は、1つではなく連続する複数の非英数字を一度に照合することにより、正規表現を少しだけ効率的にします。
ASCII以外の文字/数字も保持する場合は、次の正規表現を使用します。
@"[^\p{L}\p{N}]+"
去る
BonjourmesélèvesGutenMorgenliebeSchüler
の代わりに
BonjourmeslvesGutenMorgenliebeSchler
Linqを使用して、必要な文字を除外できます。
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
そして、拡張メソッドとしての置換操作として:
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('_'));
}
}
上記の間違いは、Replaceを誤って使用していたことです(正規表現を使用しません、CodeInChaosに感謝します)。
次のコードは、指定されたものを実行する必要があります。
Regex reg = new Regex(@"[^\p{L}\p{N}]+");//Thanks to Tim Pietzcker for regex
string regexed = reg.Replace("Hello there(hello#)", "");
これは与える:
regexed = "Hellotherehello"
var text = "Hello there(hello#)";
var rgx = new Regex("[^a-zA-Z0-9]");
text = rgx.Replace(text, string.Empty);