`
53873039oycg
  • 浏览: 825737 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]正则完全匹配

 
阅读更多

        最近使用正则replace时候遇到替换不正确的问题,如想替换an,实际上把can也替换成了c,下面的例子演示了如何删除完全匹配项
      

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 正则完全匹配_S4_Test {
	public static void main(String[] args) throws Exception {
		String str = "an aN can ban and sand AN aN AnD an pan CaN Can an An AN";
		System.out.println("---------------拼接字符串-----------------");
		String resultStr=replaceByAppend("(?<=\\s+|^)(an)(?=\\s+|$)",str);
		System.out.println(String.format("结果为%s,长度%s", resultStr,resultStr.length()));
	}

	public static String replaceByAppend(String regEx, String str) {
		Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(str);
		StringBuffer sb = new StringBuffer();
		int lastEnd = 0;//上一次匹配结束位置
		while (matcher.find()) {
			sb.append(str.substring(lastEnd, matcher.start()));
			lastEnd = matcher.end() + 1;
		}
		if(lastEnd<str.length()){
			sb.append(str.substring(lastEnd));
		}else{
			sb.deleteCharAt(sb.length()-1);//删除最后的空格
		}
		return sb.toString();
	}

}

    结果为:

   

---------------拼接字符串-----------------
结果为can ban and sand AnD pan CaN Can,长度32

    ---------------------------------------------------2014-10-23修改----------------------------------------------------------

   

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 正则完全匹配_S4_Test {
	public static void main(String[] args) throws Exception {
		String str = "an aN AN An can banan an an ban and sand AN Ban anD aN AnD an pan CaN Can an An AN an's  an";
		System.out.println("---------------拼接字符串-----------------");
		String resultStr = replaceByAppend("(?<=\\s+|^)(an)(?=\\s+|$)", str);
		System.out.println(String.format("结果为%s,长度%s", resultStr,resultStr.length()));
		System.out.println("---------------正则-----------------");
		String resultStr2 = replaceRegAll("(?<=\\s+|^)(an)(?=\\s+|$)", str);
		System.out.println(String.format("结果为%s,长度%s",resultStr2,resultStr2.length()));
		String resultStr3=str.replaceAll("(?i)(?<=\\s+|^)(an)(?=\\s+|$)", "");
		System.out.println(String.format("结果为%s,长度%s", resultStr3,resultStr3.length()));
		String resultStr4 =replaceRegAll2("(\\s+)(an)(\\s+)", str);
		resultStr4 =replaceRegAll2("(^an)(\\s+)", resultStr4);
		resultStr4 =replaceRegAll2("(\\s+)(an$)", resultStr4);
		System.out.println(String.format("结果为%s,长度%s", resultStr4,resultStr4.length()));
		String str2="$name2 $name $name name";
		System.out.println(replaceRegFirst(str2,"$name","$****"));
	}

	public static String replaceByAppend(String regEx, String str) {
		Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(str);
		StringBuffer sb = new StringBuffer();
		int lastEnd = 0;// 上一次匹配结束位置
		while (matcher.find()) {
			sb.append(str.substring(lastEnd, matcher.start()));
			lastEnd = matcher.end() + 1;
		}
		if (lastEnd < str.length()) {
			sb.append(str.substring(lastEnd));
		} else {
			sb.deleteCharAt(sb.length() - 1);// 删除最后的空格
		}
		return sb.toString();
	}

	public static String replaceRegAll(String regEx, String str) {
		Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(str);
		str = matcher.replaceAll("");
		return str;
	}

	public static String replaceRegAll2(String regEx, String str) {
		Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(str);
		while (matcher.find()) {
			str = matcher.replaceAll(" ");
			matcher = pattern.matcher(str);
		}
		return str;
	}
	
	// 替换First reg视为一般字符串匹配
	public static String replaceRegFirst(String str, String reg, String replace) {
		replace = replace == null ? "" : replace;
		return Pattern.compile(Pattern.quote(reg)).matcher(str).replaceFirst(Matcher.quoteReplacement(replace));
	}
}

   结果为:

  

---------------正则-----------------
结果为    can banan   ban and sand  Ban anD  AnD  pan CaN Can    an's  ,长度65
结果为    can banan   ban and sand  Ban anD  AnD  pan CaN Can    an's  ,长度65
结果为 can banan ban and sand Ban anD AnD pan CaN Can an's ,长度53
$****2 $name $name name	

 

    全文完
 

0
0
分享到:
评论

相关推荐

    组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip

    组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip

    setuptools-50.0.2-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-1.1.6.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    CEA二次开发脚本:用于ECSP配比设计

    CEA二次开发脚本:用于ECSP配比设计

    环形数组是一种特殊的数据结构

    环形数组

    什么是环形数组以及学习环形数组的意义是什么

    环形数组

    母亲节祝福 Python 代码(包含详细介绍)

    附件是母亲节祝福 Python 代码(包含详细介绍),文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    setuptools-0.7.4.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    max111111111

    max111111111

    攻防世界问题的概要介绍与分析

    "攻防世界"这一术语广泛应用于网络安全领域,它生动描绘了一个持续演进的技术战场,其中攻击者与防御者围绕着数据保护、系统安全及网络基础设施的完整性展开激烈的智斗。在这个虚拟而又现实交织的舞台上,知识、技能与创新成为了决定胜负的关键要素。以下是对这个复杂多维攻防世界的深度资源描述: 在一个由代码编织的宇宙里,"攻防世界"不仅是一场技术较量,更是对策略、耐心与适应能力的考验。想象一个庞大的数字迷宫,其中数据如同珍贵的宝藏,被各式各样的防火墙、加密协议和安全系统重重保护。而另一边,潜伏着一群技艺高超的黑客,他们利用漏洞、社会工程学以及先进的攻击手段,试图穿透这些防线,揭露系统的脆弱之处。 对于防御方而言,构建坚不可摧的安全体系是永恒的目标。这要求他们精通最新的安全技术,如入侵检测系统(IDS)、安全信息和事件管理(SIEM)平台、以及人工智能驱动的威胁狩猎工具。同时,定期进行渗透测试和红蓝对抗演练,模拟真实攻击场景,以发现并修补潜在漏洞。此外,培养安全意识,教育员工识别钓鱼邮件、恶意软件等,也是构建第一道防线的重要环节。 攻击者一方,则聚焦于不断探索未知漏洞(零日漏洞)、开发定制化恶意软

    关于java出租车计价器设计与实现.zip

    关于java出租车计价器设计与实现 总共4个模块 (1)出租车计价系统可以实现出租车信息的管理。 1.1出租车信息的查询:通过数据库查询出租车的车型,车号,以及是否可用 1.2出租车信息的增加:向数据库中添加出租车的车型,车号,以及是否可用 1.3出租车信息的修改:对数据库中已经存在的出租车的车型,车号,以及是否可用的信息进行修改 1.4出租车信息的删除:删除数据库中已经存储的出租车的信息 (2)出租车计价系统可以实现司机信息的管理。 2.1司机信息的查询:通过数据库查询出司机的年龄,性别,学历,名字等信息 2.2司机信息的增加:向数据库中添加司机的年龄,性别,学历,名字等信息 2.3司机信息的修改:对数据库中已经存在的司机的年龄,性别,学历,名字等信息进行修改 2.4司机信息的删除:删除数据库中已经存储的司机的信息 (3)出租车计价系统可以实现出租车计价功能。 3.1通过java多线程,模拟出租车在路上的情景 3.2通过距离计费的方式,将订单的时间,乘客的信息,订单的价格等插入数据库中 (4)出租车计价系统可以实

    华为OD机试D卷 - 拼接URL - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    setuptools-8.2.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C语言输出母亲节祝福(内含详细描述)

    附件是C语言输出母亲节祝福(内含详细描述),文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    setuptools-40.4.2.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    仰卧起坐YOLOV8-POSE,C++

    仰卧起坐YOLOV8-POSE,C++,只需要OPENCV

    行动学习指导手册glq.ppt

    行动学习指导手册glq.ppt

    setuptools-0.9.8.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    计算机网络资料复习pdf

    计算机网络资料复习pdf

    setuptools-1.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics