在c#中使用正则表达式删除特定的字符组合

时间:2014-12-26 10:08:08

标签: c# regex string

我想在字符串中保留以下字符:

  • 数字字符:1-9
  • 字母字符:aA-zA
  • 仅包含字母数字字符的叛逆字符,即" x' x"其中x属于字母数字字符组。

此时,我可以保留所有字母数字字符。问题在于叛逆的性格,我保留了所有的叛逆者,而我只想保留被字母数字字符包围的那些。这是我的代码:

Regex rgx = new Regex("[^a-zA-Z0-9' -]");
string newString = rgx.Replace(oldString, "");

示例:对于此字符串"abc'd1*%'",我想获得"abc'd1"

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式,然后用空字符串替换匹配的字符。

@"(?<![A-Za-z])'|'(?![A-Za-z])|[^A-Za-z0-9']"

DEMO

<强>解释

  • (?<![A-Za-z])'匹配所有不带字母的单引号。
  • |
  • '(?![A-Za-z])匹配所有未跟随字母的单引号。所以这两个模式无法匹配单引号,前面跟着一个字母表。
  • |
  • [^A-Za-z0-9']从剩余的字符串中,此模式将匹配任何字符,但不匹配字母数字或单引号。

<强>代码:

string str = "abc'd1*%'";
string result = Regex.Replace(str, @"(?<![A-Za-z])'|'(?![A-Za-z])|[^A-Za-z0-9']", "");
Console.WriteLine(result);
Console.ReadLine();

IDEONE

答案 1 :(得分:0)

[a-zA-Z0-9 -]+|(?<=[a-zA-Z])'(?=[a-zA-Z])

试试这个。看看演示。

https://regex101.com/r/dU7oN5/13

答案 2 :(得分:0)

如果您要匹配空格,请尝试以下操作:

[\w\s-]+|(?<=[\w\s])'(?=[\w\s])

如果没有空格,请尝试:

[\w-]+|(?<=[\w])'(?=[\w])