应用退格键的正则表达式我有一个来自telnet客户端的字符串。该字符串包含我需要应用的退格字符。每个退格键应该删除一个先前键入的字符。我正在尝试使用正则表达式在单个替换中执行此操作:stringtxt="Hello7bWorld123bbb";txt=Regex.Replace(txt,".\b","",RegexOptions.ECMAScript);这导致“HelloWorld12”。当然,我也想去掉“12”,但显然不符合我的表达。在某种程度上,它应该重复替换直到没有更多的匹配项。关于如何使用单个正则表达式实现此目的的任何想法?这基本上就是我们将^nb^n与Java正则表达式变体匹配的方式?,所以我们可以在那里重用它的答案:varregex=newRegex(@"(?:[^b](?=[^b]*((?>1?)[b])))+1");Console.WriteLine(regex.Replace("Hello7bWorld123bbb",""));此外,.NET正则表达式引擎支持平衡组,因此我们可以使用不同的模式:varregex=newRegex(@"(?[^b])+(?[b])+(?(L)(?!))");(这意味着:匹配一个或多个非退格键,为它们分配名称“L”,然后跟随一个或多个退格键,为它们分配名称“R”,条件是每个“R”必须有一个对应的“L”,如果留下任何“L”,则匹配被丢弃(因为(?!)匹配)。)我不会尝试使用正则表达式,因为它很难阅读,我认为甚至不可能使用正常没有任何类似perl的正则表达式魔术扩展的正则表达式。我的建议是(类似python的伪代码):stack=[]forcharinstr:ifchar==BACKSPACEandnotstack.isEmpty():stack.pop()else:stack.push(char)result=''。join(stack)它会立即清楚发生了什么以及它是如何工作的。以上就是《C#学习教程:正则表达式与Backspace的应用》分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
