正则表达式替换不需要的字母

时间:2014-08-07 16:41:11

标签: c# regex

我用C#编写了一个小程序来捕获游戏文本。 我的问题是Text allso包含我试图不具备的Collor代码。我读到了函数Regex.Replace 我认为这是适合的。

我有跟随字符串(线)我想要清除我使用小的小工具浓咖啡与正则表达式玩一点但我从未想过它真的。

这是我要使用的字符串:

|c001177ffSave Code =|r |cff00AA00A|cff00AA00G|cff00AA00Q|cffff69b4g|r |cff00AA00R|cff40e0d09|cffffff00$|cffffff00#|r |cff40e0d04|cffff69b4f|cff00AA00R

我尝试使用^|( [a-zA-Z0-9]{9})

给了我这些比赛 c001177ff cff00AA00 cff00AA00 cff00AA00 cffff69b4 cff00AA00 cff40e0d0 cffffff00 cffffff00 cff40e0d0 cffff69b4 cff00AA00

我不是很擅长正则表达式,我刚刚开始它。我不希望任何机构向我提供完整的解决方案(非常欢迎您这样做)至少一点帮助我如何解决这个问题。我想过滤文本。

输入代码

 |c001177ffSave Code =|r |cff00AA00A|cff00AA00G|cff00AA00Q|cffff69b4g|r |cff00AA00R|cff40e0d09|cffffff00$|cffffff00#|r |cff40e0d04|cffff69b4f|cff00AA00R

应该过滤到

Save Code = AGQg R9$# 4fR

我认为theese是十六进制颜色代码,| c标记字符串的开头和| r结尾。我认为| r |仅用于表示第一个颜色字符串结束,而不是我们获得SPACE和|表示下一次开始。

7 个答案:

答案 0 :(得分:2)

一个简单的Linq怎么样?

var output = String.Join("", input.Split('|')
                             .Select(s => s.Length != 10 ? ' ' : s.Last()))
             .Trim();

答案 1 :(得分:1)

所以我认为你遇到的问题并没有逃脱你的| ...以下的正则表达式对我有用:

var replaced = Regex.Replace(intput, @"\|c[0-9a-zA-Z]{8}|\|r", "");
  • \|c[0-9a-zA-Z]{8} - 以"|c"开头,然后是任意8个字母或数字
  • | - 或
  • \|r - 匹配"|r"

答案 2 :(得分:1)

你走在正确的轨道上。你的正则表达式

^|( [a-zA-Z0-9]{9})

两者都强制匹配仅在输入字符串的开头,由于^ start-of-line anchor|需要转义,因为未转义,这是一个特殊的"or" operator ,这完全改变了你的正则表达式的含义。

此外,|之后的空格是不受欢迎的,capture group是不必要的,因为您只想消除此部分。

如果您替换此

的所有实例
\|[a-zA-z0-9]{9}

nothing (空字符串)

您将实现目标 。在这里试试:http://regex101.com/r/rF6yB6/1

但似乎你真的想要消除管道之后的九个字符,但最多可以消除九个字符。因此,请改用{1,9} range quantifier

\|[a-zA-z0-9]{1,9}

试一试:http://regex101.com/r/rF6yB6/2

这似乎完全达到了你的目标。


请考虑将Stack Overflow Regular Expressions FAQ加入书签以供将来参考。

答案 3 :(得分:0)

string input = "[The example input from your question]";
string output = input.Replace("|r", "");
while (output.Contains("|c"))
    output = output.Remove(output.IndexOf("|c"), 10);
// output = "Save Code = AGQg R9$# 4fR"

我比使用正则表达式更喜欢它,因为它对我来说更加清晰。

答案 4 :(得分:0)

var str1 = "|c001177ffSave Code =|r |cff00AA00A|cff00AA00G|cff00AA00Q|cffff69b4g|r |cff00AA00R|cff40e0d09|cffffff00$|cffffff00#|r |cff40e0d04|cffff69b4f|cff00AA00R"
var str2 = Regex.Replace(str,@"\|(r|[a-zA-Z0-9]{9})","") //"Save Code = AGQg R9$# 4fR"

答案 5 :(得分:0)

除了this answer re: escaping the "pipe" character之外,您还可以使用插入符号^)字符开始正则表达式。这匹配一行的开头。

正确的正则表达式是:

\|c[0-9a-zA-Z]{8}

答案 6 :(得分:0)

此正则表达式应匹配您要删除的所有字符:

([|]c([0-9]|[a-f]|[A-F]){8})|[|]r

这是故障......

垂直管道是OR标记,因此要搜索它,请将其放在方括号[和]中。

括号生成一组。所以你要搜索([|] c([0-9] | [af] | [AF]){8})或[|] r这是你的所有颜色代码OR | r。

颜色代码的细分是以| c开头的集合,后面跟着正好8个字符的集合,可以是0到9或从到f或从A到F.

我在RegexPal.com进行了测试。