c#Regex-删除只开发特殊包机组合的字符串

时间:2015-04-22 07:05:13

标签: regex c#-4.0

我正在寻找正则表达式,我可以忽略仅仅所有特殊章程组合的字符串。

实施例

List<string> liststr = new List<string>() { "a b", "c%d", " ", "% % % %" ,"''","&","''","'"}; etc...

我需要这个结果

{ "a b", "c%d"}

3 个答案:

答案 0 :(得分:1)

您也可以使用它来匹配不带任何Unicode 字母的字符串:

var liststr = new List<string>() { "a b", "c%d", " ", "% % % %", "''", "&", "''", "'" };
var rx2 = @"^\P{L}+$";
var res2 = liststr.Where(p => !Regex.IsMatch(p, rx2)).ToList();

输出:

enter image description here

我还建议使用private static readonly选项创建正则表达式对象作为Compiled字段,以便不影响性能。

private static readonly Regex rx2 = new Regex(@"^\P{L}+", RegexOptions.Compiled);
... (and inside the caller)
var res2 = liststr.Where(p => !rx2.IsMatch(p)).ToList();

答案 1 :(得分:0)

使用这个:

.*[A-Za-z0-9].*

它匹配至少一个字母数字字符。这样做,它将采用任何不仅是符号/特殊字符的字符串。它会输出您想要的输出,请参见此处:demo

答案 2 :(得分:0)

您可以使用非常简单的正则表达式

Regex regex = new Regex(@"^[% &']+$");

其中

  • [% &']是您希望包含的特殊字符列表

示例

List<string> liststr = new List<string>() { "a b", "c%d", " ", "% % % %" ,"''","&","''","'"};
List<string> final = new List<string>();

Regex regex = new Regex(@"^[% &']+$");

foreach ( string str in liststr)
{
        if (! regex.IsMatch(str))
            final.Add(str);
}

将输出

final = {"a b", "c%d"}