C# 替换不需要的字母的正则表达式
我用C#编写了一个小程序来捕获ingame文本。 我的问题是,文本allso包含我尽量避免的Collor代码。我读过关于函数的书 我想这将是一个很好的选择 我有下面的字符串(行),我想澄清一下,我用了一个小工具espresso来玩正则表达式,但我从来没有真正弄明白 这是我将要使用的字符串:C# 替换不需要的字母的正则表达式,c#,regex,C#,Regex,我用C#编写了一个小程序来捕获ingame文本。 我的问题是,文本allso包含我尽量避免的Collor代码。我读过关于函数的书 我想这将是一个很好的选择 我有下面的字符串(行),我想澄清一下,我用了一个小工具espresso来玩正则表达式,但我从来没有真正弄明白 这是我将要使用的字符串: |c001177ffSave Code =|r |cff00AA00A|cff00AA00G|cff00AA00Q|cffff69b4g|r |cff00AA00R|cff40e0d09|cffffff00$
|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表示字符串的结束。我认为| r |只是用来表示第一个颜色字符串的结束,而|表示下一个开始
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"
比起使用正则表达式,我更喜欢它,因为它对我来说更清晰
与使用正则表达式相比,我更喜欢它,因为它对我来说更为清晰。所以我认为您遇到的问题是没有逃过
。。。以下正则表达式适用于我:
var replaced = Regex.Replace(intput, @"\|c[0-9a-zA-Z]{8}|\|r", "");
-匹配以\|c[0-9a-zA-Z]{8}
,然后匹配任意8个字母或数字开头的“|c”
-或|
-匹配\\r
“\r”
。。。以下正则表达式适用于我:
var replaced = Regex.Replace(intput, @"\|c[0-9a-zA-Z]{8}|\|r", "");
-匹配以\|c[0-9a-zA-Z]{8}
,然后匹配任意8个字母或数字开头的“|c”
-或|
-匹配\\r
“\r”
- 简单的Linq怎么样
var output = String.Join("", input.Split('|')
.Select(s => s.Length != 10 ? ' ' : s.Last()))
.Trim();
简单的Linq怎么样
var output = String.Join("", input.Split('|')
.Select(s => s.Length != 10 ? ' ' : s.Last()))
.Trim();
你在正确的轨道上。你的正则表达式
^|( [a-zA-Z0-9]{9})
这两种方法都强制匹配仅位于输入字符串的开头,因为需要转义,|
,因为未转义,它是一种特殊类型,完全改变了正则表达式的含义
此外,|
后面的空格是不需要的,并且不需要,因为您只想消除这一部分
如果替换此的所有实例
\|[a-zA-z0-9]{9}
不带任何内容(空字符串)
你将实现你的大部分目标。请在此处尝试:
但似乎你真的不想只删除管道后面的九个字符,而是要删除九个字符。因此,请使用以下选项:
试试看:
这似乎正好实现了你的目标
请考虑书签以备将来参考。 < P >你走对了。你的正则表达式
^|( [a-zA-Z0-9]{9})
这两种方法都强制匹配仅位于输入字符串的开头,因为需要转义,|
,因为未转义,它是一种特殊类型,完全改变了正则表达式的含义
此外,|
后面的空格是不需要的,并且不需要,因为您只想消除这一部分
如果替换此的所有实例
\|[a-zA-z0-9]{9}
不带任何内容(空字符串)
你将实现你的大部分目标。请在此处尝试:
但似乎你真的不想只删除管道后面的九个字符,而是要删除九个字符。因此,请使用以下选项:
试试看:
这似乎正好实现了你的目标
请考虑书签,以供将来参考。
< P>此外,您要用插入符号(<代码> ^ < /代码>)字符启动正则表达式。这与行的开头相匹配 正确的正则表达式应该是:\|c[0-9a-zA-Z]{8}
除此之外,您还使用插入符号(^
)字符启动正则表达式。这与行的开头相匹配
正确的正则表达式应该是:
\|c[0-9a-zA-Z]{8}
此正则表达式应与要删除的所有字符匹配:
([|]c([0-9]|[a-f]|[A-F]){8})|[|]r
这里是故障
垂直管道是一个或标记,因此要搜索它,请将其放在方括号中[和]
括号构成一个集合。因此,您正在搜索([|]c([0-9][a-f][a-f]){8})或[|]r,这是您所有的颜色代码或| r
颜色代码的细分是以| c开头的集合,后面紧跟着8个字符的集合,这些字符可以是0到9或a到f或a到f
我在RegexPal.com上对其进行了测试。此正则表达式应与要删除的所有字符匹配:
([|]c([0-9]|[a-f]|[A-F]){8})|[|]r
这里是故障
垂直管道是一个或标记,因此要搜索它,请将其放在方括号中[和]
括号构成一个集合。因此,您正在搜索([|]c([0-9][a-f][a-f]){8})或[|]r,这是您所有的颜色代码或| r
颜色代码的细分是以| c开头的集合,后面紧跟着8个字符的集合,这些字符可以是0到9或a到f或a到f
我在RegexPal.com上测试了它。是否
string.Split(“|”)
+几行代码不起作用?您必须使用正则表达式吗?string.Split(“|”)
+几行代码不起作用吗?你必须使用正则表达式吗?这是防御问题之一谢谢你我记住我必须逃跑|如果我寻找它这是防御问题之一谢谢你我记住我必须逃跑|如果我寻找它