删除"[]"所有这些都出现在字符串中
本文关键字:quot 字符串 所有这些 删除 | 更新日期: 2023-09-27 18:19:02
我正在构建一个小的文本清理程序,我目前正在维基文章上测试它,我试图有效地删除"[2]","[14]","[nb 6]"等。
我有这段代码,它几乎完成了这项工作,但它看起来非常长,我觉得必须有一种方法在一行中完成它,但我是Regex的新手,无法弄清楚。我也读过关于Regex的各种各样的意见,所以如果有另一种方法,那就太好了。
无论如何,这是我当前的代码:
string refinedText = Regex.Replace(sourceText, @"'[[0-9]']", "");
refinedText = Regex.Replace(refinedText, @"'[[0-9]", "");
refinedText = Regex.Replace(refinedText, @"'[[a-z]", "");
refinedText = Regex.Replace(refinedText, @"[0-9]']", "");
问题是"[]"内有2个数字,我不知道如何告诉它删除两者,因为做"0-9"只是删除第一个数字,我可以为他们做2部分的替换;但对于"[nb 3]"的实例,b总是保持不变,因为我无法在"[]"消失后指定单独的"b"作为引用。还有"[nb 14]"同样的问题,如果有两位数后的"nb"。
我确信这只是在1行中完成,但我找不到任何地方解释regex到这种程度。
-谢谢。
如果您想删除方括号及其内容,无论内容是什么,表达式看起来像这样:
@"'[[^']]*']"
这意味着"匹配所有内容,直到结束括号"。这比带有不情愿限定符.*?
的点更有效,因为它避免了所谓的灾难性回溯。
使用+
修饰符:
string refinedText = Regex.Replace(sourceText, @"'[[0-9]+']", "");
作为正则表达式语言-快速参考解释:
匹配前一个元素一次或多次。
删除括号之间的任何字符:
string refinedText = Regex.Replace("[0as9]", @"'[.+']", "");
或者如果您还想处理"[]"
的情况,那么将+
更改为*
:
匹配前一个元素0次或多次。
string refinedText = Regex.Replace("[0as9]", @"'[.*']", "");
试试:
string refinedText = Regex.Replace(sourceText, @"'[[0-9]+']", "");
你也可以这样做:
var refinedText = Regex.Replace(sourceText, @" ?'[.*?']", string.Empty);
<<p> REGEX演示/strong> 这将删除文本框内的所有内容,包括字符和数字