当前位置: 首页 > 后端技术 > Python

如何从字符串中删除“-n”?80%的同学都错了!

时间:2023-03-26 16:28:17 Python

大家好,我是Yupi,今天给大家分享一个小知识。我最近的工作是设计一个SQL解析引擎。简单来说,就是将一个SQL表达式字符串解析成一个对象树,进行查询等一系列操作。一开始遇到了一个很头疼的问题,用户写的SQL语句可能很不规范!理想的SQL语句具有标准缩进且没有多余字符:select*fromuser;但现实往往是这样的:select*\nfromuser;上面的语句不仅有随意的缩进和换行,还有很多无意义的字符串,比如"\n"!因此,如果我们要设计一个通用的SQL解析引擎,首先要对字符串进行预处理,并对输入的SQL语句进行标准化处理。比如去除回车、换行、多余的空格和特殊字符等。那么问题来了,如何去除字符串中的所有“\n”呢?注意这里的“\n”不是换行符,而是由字符'\'和字符'n'组成的字符串!#转换前select*\nfromuser;#转换后select*fromuser;首先我想到了两个思路:用循环语句依次扫描每个字符,通过当前字符和下一个字符判断是否为“\n”,再将其去掉。直接使用Java语言提供的replaceAll方法,传入一个正则表达式,将完整字符串中所有匹配该正则表达式的子字符串直接替换为空字符串。我这里选择后者。直接使用现成的方法更方便,并且借助强大的正则表达式,可以同时替换多个冗余字符。Java正则表达式定义:/**替换所有*regex正则表达式*替换为新字符串*/publicStringreplaceAll(Stringregex,Stringreplacement){returnPattern.compile(regex).matcher(this).replaceAll(replacement);}那么如何写一个正则表达式来去掉所有的“\n”呢?在这里我发起了投票,大家可以自己思考一下,给出自己的选择。一开始觉得太简单了,直接写了下面的代码:str.replaceAll("\n","");结果字符串中的“\n”无法顺利替换,只能换行!原因很简单。在Java字符常量中,反斜杠(\)是一种称为转义字符的特殊字符。它的作用是转义下一个字符,本身没有实际意义!因此,不能使用下面的方法直接输出反斜杠:如果要输出单个反斜杠,需要加反斜杠转义:同样,如果要输出“\n”字符串,代码应该这样写this:System.out.println("\\n")然后试试这个正则表达式:str.replaceAll("\\n","");效果是一样的!只需删除换行符。实际上,正确的答案应该是使用四个反斜杠,因为反斜杠在Java和正则表达式中都是转义字符!其中,第一条斜线是转义符,第二条斜线是斜线本身,第三条斜线又是转义符,第四条斜线是斜线本身。在Java中,输出一个“\n”字符串需要两个反斜杠和一个'n'。在Java的正则表达式中,需要为两个反斜杠各分配一个反斜杠进行转义。生效。总而言之,记住一句话:在Java正则表达式中,四个反斜杠用来匹配一个反斜杠!最后,正则表达式是一个大课题。我们推荐RegExr,这是一个用于学习、创建和测试正则表达式的在线可视化工具。通过实践学习并立即上手!文章来源:https://mp.weixin.qq.com/s/rN...