notepad++ 批量替换删除指定字符之后 或者 之前的字符
资源宝分享:www.httple.net
注意: 不支持多行表达式 (involving \\n, \\r, etc).
使用正则表达式的标记,通过()来包围想要用的字符,然后用\\1 来替换字符串,第一个匹配文本。
例如:
想要把除了 “无敌大奶爸” 之外的所有内容去除。怎么做?还是Ctrl+F,然后把不是无敌大奶爸的内容一个个输进去,在替换成空白,重复这个操作,直到所有杂物排除掉。就可以搜到无敌大奶爸了。
逐个铲除多余的
最后得到干净的奶爸(这个反向查找不是反选别误会)但这个始终是指标不治本,如果杂物更更更更多!!没事,正则表达式出动吧!
我们撤销到刚才的凌乱状态,然后还是查找F,查找模式选择:正则表达式。然后查找目标输入这个:
无\\S+敌\\S+大\\S+奶\\S+爸
这样就能查到从无开始到爸结尾,中间穿插敌大奶的地方了。\\S =代表匹配任何一个字符,大写的。\\S+就是匹配任何一个字符包括往后的任何字符。一行内。
所以他会按照这个搜索: 无XX敌XX大XX奶XX爸然后我们直接将他替代成: 无敌大奶爸,在搜索,就能找到所有的大奶爸了。
原来不止一个大奶爸
*******!!无敌大大大大奶爸也会被搜索出来!无XX敌XX大XX奶XX爸有个弊端就是,如果里面有相同的字也会被忽略掉。比如: 无XX敌敌X大大大X奶XX爸 => 无敌大奶爸这样原本不是一个真的奶爸也会因为中间去掉了字数变成大奶爸,怎么办?
嗯哼?如果这样的话,我推荐你用两个字之间来逐个搜索了。
或者用人的智慧眼来分析呗,大家都是字,何必互相为难。
那我就用: 无\\W+敌\\W+大\\W+奶\\W+爸
\\W = 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”,后面跟 + 号同上,往后扩展。这样我就只改英文字符和数字下划线等,无视中文,无敌大大大跟我没关系了!!
关于其他好玩的正则表达式,可以参考百度自己按。可以改数字,改标点XXX一大堆。这里就不说了。
高级替代: 改变包含在其中的内容想改包含在中间的某几个数字。
目标:想把 [?,x,?] 里的数字改成别的数字怎么做?
如果你要一个个替代 [] 里的内容,字数躲起来会很麻烦.所以干脆直接用正则表达式解决。搜索: , \\d+, 替换成 , 233, (借助两个逗号定位来获取中间的数字 \\d 代表0-9的数字)
删除“123”之后的所有字符用:
删除“123”之前的所有字符用:
如何在C#中使用Replace来替换字符串,以及将字符串大小写转换
C#中替换操作可以通过使用 Replace 方法来完成。Replace 方法需要两个参数,第一个参数是要被替换的子字符串,第二个参数是替换后的子字符串。以下是一个示例:
string originalString = \”Hello, World!\”;string replacedString = originalString.Replace(\”World\”, \”C#\”);Console.WriteLine(replacedString); // 输出:\”Hello, C#!\”\”
在这个例子中,我们将字符串 \”Hello, World!\” 中的 \”World\” 替换为 \”C#\”,得到新的字符串 \”Hello, C#!\”\”。
对于大小写转换,可以使用 ToUpper 和 ToLower 方法来将字符串转换为全部大写或全部小写。以下是一个示例:
string upperCaseString = \”Hello, World!\”.ToUpper();Console.WriteLine(upperCaseString); // 输出:\”HELLO, WORLD!\”\”string lowerCaseString = \”Hello, World!\”.ToLower();Console.WriteLine(lowerCaseString); // 输出:\”hello, world!\”\”
在这个例子中,我们将字符串 \”Hello, World!\” 转换为大写和小写,分别得到新的字符串 \”HELLO, WORLD!\” 和 \”hello, world!\”。
namespace ConsoleAppC
{
internal class Program
{
static void Main(string[] args)
{
string sayHello = \”Hello World!\”;
Console.WriteLine(sayHello);
// 使用Replace方法替换字符串中的特定文本
sayHello = sayHello.Replace(\”Hello\”, \”Greetings\”);
Console.WriteLine(sayHello); // 输出:\”Greetings World!\”
// 使用ToUpper方法将字符串转换为大写
Console.WriteLine(sayHello.ToUpper()); // 输出:\”GREETINGS WORLD!\”
// 使用ToLower方法将字符串转换为小写
Console.WriteLine(sayHello.ToLower()); // 输出:\”greetings world!\”
}
}
}
这段代码首先定义了一个名为sayHello的字符串变量,并赋值为\”Hello World!\”。然后,使用Replace方法将\”Hello\”替换为\”Greetings\”。接下来,使用ToUpper方法将字符串转换为大写,然后使用ToLower方法将字符串转换为小写。转换的结果都通过Console.WriteLine输出到控制台。
注意:实际应用中可能需要更多错误处理逻辑。例如,如果Replace方法中要搜索的子字符串不存在于原始字符串中,它仍然会返回原始字符串(即不会抛出异常)。对于大写和小写转换,如果原始字符串中含有非字母字符,这些字符的大小写将保持不变。
String 方法中 replace 和 replaceAll 详解
我们先做一个简单的概述:
- replace() 和 replaceAll() 都是常用的替换字符串的方法;
- 两者都是全部替换,可以把源字符串中的某一字符或字符串全部换成指定的字符或字符串;
- 如果只想替换第一次出现的,可以使用 replaceFirst();
- 这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;
- replaceAll() 和 replaceFirst() 所用的替换参数可以是普通字符串,也可以是正则表达式;
- 如果 replaceAll() 和 replaceFirst() 所用的参数据不是基于规则表达式的,那么它们与 replace() 替换字符串的效果、效率是一样的。
注意:执行了替换操作后,返回一个新的对象,源字符串的内容是没有发生改变的。
来看看源码中关于两个方法的定义,我分别摘取了一段:
通过方法的定义,我们发现:replaceAll() 在定义它的时候,就被赋予可以匹配正则表达式的功能。 通过源码,可以总结两点:
- String.replace() 和 String.replaceAll() 调用的方法是一样的,都是Matcher.replaceAll() 方法;
- replaceAll() 方法没有传入参数 “Pattern.LITERAL”;
就是这一点点的不同,决定了 replaceAll() 方法需要优先判断被替换的参数 regex 是不是一个正则表达式。
- 如果是正则,执行正则替换;
- 如果是字符串,执行字符串替换,此时和 replace() 就是一样的了。
我知道学技术的小伙伴都属于“刨根问底”栏目组的,下面我带大家看一看,参数 \”Pattern.LITERAL\”是怎么影响业务逻辑的:
1. String.replaceAll(String regex, String replacement) 函数如下:
它共调用了三个函数,作用分别是:
- Pattern.compile(String regex) – 编译(解析)正则表达式,获得Pattern对象;
- Pattern.matcher(CharSequence input) – 获取匹配器;
- Matcher.replaceAll(String replacement) – 替换字符串;
顾名思义,我们需要解释的重点,就在 Pattern.compile(String regex) 方法中。
2. Pattern.compile(String regex) 函数如下:
它返回的是一个Pattern对象。
3. Pattern的构造函数如下:
这个构造函数是 private 级别的,不能被其他类直接调用,只能通过 Pattern 类的 compile(String regex) 和 compile(String regex, int flags) 调用。 该构造函数调用了 compile(),对 regex 参数的处理就发生在这个函数里面!!
4. Pattern.compile()函数如下:
其中:
- ①中的参数\”LITERAL\”就是我们上面提到的那一点点不用(不清楚的可以再回看一下);
- ①处的 if – else 语句,决定②处是否执行;
- ②处的 matchRoot = expr(lastAccept);就是获得正则表达式匹配根结点的方法,若执行此方法,则开始进行正则表达式的匹配。
好了,再往下的代码我就不再演示了,有兴趣的小伙伴可以自己看一看。
说了很多理论的东西,写几行代码验证下:
由于“.”属于正则表达式的符号,所以 replaceAll() 方法执行的是正则替换。
转义符号 – “\\”,需要格外注意下:
- “\\” 在 java 中是一个转义字符,所以需要用两个代表一个。 例如 System.out.println(“\\\\”);只打印出一个 “\\”;
- “\\”也是正则表达式中的转义字符(replaceAll()的参数就是正则表达式),也需要用两个代表一个。 所以:“\\\\\\\\”会被j ava 转换成 “\\\\”,“\\\\” 又会被正则表达式转换成“\\”。
看一个例子:
- replace 的参数是 char 和 CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence 即字符串序列的意思,说白了也就是字符串);
- replaceAll 的参数是 regex,即基于正则表达式的替换。比如,可以通过 replaceAll (\”\\d\”, “*”) 把一个字符串所有的数字字符都换成星号;
- String 类执行了替换操作后,返回一个新的对象,源字符串的内容是没有发生改变的。
作者:IT无知君链接:https://juejin.cn/post/7020951662546124837
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。