【问题标题】:Regular Expression to replace non alpha characters with spaces正则表达式用空格替换非字母字符
【发布时间】:2010-11-18 22:17:35
【问题描述】:

我一直在尝试构建一个正则表达式,但无法让一个特定条件起作用。

我想要一个正则表达式来删除除破折号 (-) 之外的所有非字母字符。只有以空格为前缀的破折号才应被替换。

TEST-TEST -TEST#TEST.TEST

应该改为

TEST-TEST TEST TEST TEST

我一直在使用[^a-zA-Z0-9],但无法包含一个 OR 条件初始化。

【问题讨论】:

  • 根据您的示例,您似乎也想保留空格?
  • 或用空格替换非字母字符?

标签: c# .net regex


【解决方案1】:

这是我想出的(\s-|[^A-Za-z0-9-])...它将删除所有非字母数字但保留“-”,除非它前面有空格“-”

在 Linux 中使用 sed 进行测试,目前我无法使用 VS 或 Mono 在 C# 中进行测试

echo "TEST-TEST -TEST#TEST.TEST -1234" | sed 's/\(\s-\|[^A-Za-z0-9-]\)/ /g'

输出

TEST-TEST TEST TEST TEST 1234
  • () 和 |用于 OR 条件
  • 我们首先使用\s- 删除所有“-”
  • 接下来我们保留所有字母数字和“-”与[^A-Za-z0-9-]

【讨论】:

  • var regex = new Regex(@"(\s-|[^A-Za-z0-9-])"); string result = regex.Replace("TEST-TEST -TEST#TEST.TEST", " ");
【解决方案2】:
// Skip over '-', grab non-word characters or the ' -' sequence to replace
string pattern = @"(?!-)(\W| -)+";  
string replacement = "";
Regex regex = new Regex(pattern);
string result = regex .Replace("Replace - this *@#&@#* string-already", replacement);

(?!-) 是一个零宽度的负前瞻断言,它将跳过“-”符号...如果它前面有空格,则第二组将匹配它。

如果您尝试替换空格而不是完全删除字符,只需更改为

string replacement = " ";

这个模式是贪心的,所以它会用一个空格替换成组的非单词字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多