[英]Regular Expression to Replace Unwanted Letters
我用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
我认为这些是十六进制颜色代码,| c表示字符串的开头,| r表示字符串的结尾。 只是用来表示第一个颜色字符串比我们得到的SPACE和|结束。 表示下一次开始。
简单的Linq怎么样?
var output = String.Join("", input.Split('|')
.Select(s => s.Length != 10 ? ' ' : s.Last()))
.Trim();
因此,我认为您遇到的问题没有使您逃脱|
...以下正则表达式适用于我:
var replaced = Regex.Replace(intput, @"\|c[0-9a-zA-Z]{8}|\|r", "");
\\|c[0-9a-zA-Z]{8}
-匹配以"|c"
开头,然后是任意8个字母或数字 |
- 要么 \\|r
匹配"|r"
您走在正确的轨道上。 您的正则表达式
^|( [a-zA-Z0-9]{9})
由于^
start-of-line anchor和|
,两者都强制匹配仅在输入字符串的开头 |
需要转义,因为不转义,它是一个特殊的“或”运算符 ,它完全改变了正则表达式的含义。
另外, |
后的空格 是不希望的,而捕获组是不必要的,因为您只想删除此部分。
如果替换此所有实例
\|[a-zA-z0-9]{9}
一无所有 (空字符串)
您将实现大部分目标。 在这里尝试: http : //regex101.com/r/rF6yB6/1
但是似乎您真的希望不仅在管道后面消除9个字符,而且还要消除9 个字符。 因此,请使用{1,9}
范围量词 :
\|[a-zA-z0-9]{1,9}
试试看: http : //regex101.com/r/rF6yB6/2
这似乎完全可以实现您的目标。
请考虑将“ 堆栈溢出正则表达式” FAQ标记为书签,以备将来参考。
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"
我比使用Regexes更喜欢这一点,因为对我而言,它是如此清晰。
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"
此正则表达式应与您要删除的所有字符匹配:
([|]c([0-9]|[a-f]|[A-F]){8})|[|]r
这是细分...
垂直管道是一个OR标记,因此要搜索它,请将其放在方括号[和]中。
括号进行设置。 因此,您要搜索([|] c([0-9] | [af] | [AF]){8})OR [|] r,它是所有颜色代码OR | r。
颜色代码的分解是一个以| c开头的集合,其后是正好是8个字符的集合,这些字符可以是0到9或a到f或A到F。
我在RegexPal.com上进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.