正则表达式删除标点符号,它不是单词/值的一部分所以留下%,£,',但删除,([*

时间:2015-01-25 16:59:37

标签: c# regex string split punctuation

我已经阅读了wiki和其他建议的材料,但我无法理解这个正则表达式。

要详细说明,我需要将一个句子分成单词,而只需要单词/值,这样我就可以将每个单词与其他单词中的其他单词进行比较。这意味着其“”对于保持美元符号非常重要,因为10美元不同于10美元,百分比相同,“汤姆”则带撇号。价值££&#只有在没有空格后才能删除&可用于公司名称,如B& Q和货币,货币符号本身与我的需求无关。

所以它会是:删除除$£€& +之外的所有标点符号 - 除非后跟空格,如果前面有空格则删除%。

然后我会用空格分成一个数组,它只是这个该死的正则表达式。

我有一个正则表达式白名单:

Regex.Replace(string, @"[^0-9a-zA-Z\s]+", "");

我只是无法弄清楚如何指定一个字符+空格或空格+字符,例如删除“$”但是当它的“$ 10”时我留下$我知道是哪个空格但我如何附加到我不知道的正则表达式。

2 个答案:

答案 0 :(得分:2)

@Tom,当然你可以使用Regex,这是

的答案
  

我想删除最初没有拆分,并且拥有1个正则表达式将比10个左右单独的string.removes更好。我需要。此外,我宁愿不只是因为人们不想帮忙而采取凌乱的做法,它就像这个网站不是要求帮助的问题......

以及如何使用 String.Split (如果它会更短,我会发布此评论)

var symbols = "£$€#&%+-";
var punctuationsChars =  Enumerable.Range(char.MinValue, char.MaxValue - char.MinValue)
                            .Select(i => (char)i)
                            .Where(c => char.IsPunctuation(c))
                            .Except(symbols)
                            .ToArray();

string input = "leave £10 remove £ and leave 10% remove % ok";

var parts = input.Split(punctuationsChars)
                 .SelectMany(x => x.Split())
                 .Where(x => !(x.Length == 1 && symbols.Contains(x[0])))
                 .ToList();

因此,您不必使用正则表达式如果您不知道如何使用它。

输出:leave £10 remove and leave 10% remove ok

答案 1 :(得分:1)

您不需要正则表达式来执行此操作:

var newStr = new string(originalStr.Where(c => !",([*\"".Contains(c)).ToArray());