0 0

Java正则表达式高手请进: 求一Java正则表达式来解析和提取多行字符串5

被解析的字符串:str="AAAA:\r\n\r\n1. task a1 done.\r\n2.task a2 done.\r\nBBBB:\r\n1.task b1 done\r\n2.task b2 done.\r\nCCCC:\r\nN/A\r\n**end**";
该被解析的字符串在网页或邮件中显示如下:
AAAA:
1. task a1 done.
2. task a2 done.
BBBB:
1. task b1 done.
2. task b2 done.
CCCC:
N/A.
**end**
要求:
1. 取出每个组的标题和内容,如下:
第一组数据可能是:
AAA:
1. task a1 done.
2. task a2 done.
第二组数据可能是:
BBBB:
1. task b1 done.
2. task b2 done.
第三组数据可能是:
CCCC:
N/A.

2.AAAA,BBBB,CCCC的位置不确定,可以互换,但**end**的位置一定是在最后。

3. 不能简单的用split("AAAA:|BBBB:|CCCC:|**end**")来分成相应的String数组,因为这样没法对应相应的标题,比如哪个组和AAAA对应或BBBB对应等。

问题补充:
谢谢回复^_^
其实我是要解析一个周报的内容,AAAA,BBBB,CCCC分别是不同的标题,比如AAAA=task,BBBB=goals,CCCC=risk 等等。
我的要求是要解析出这些task,goals和risk的相关内容,因此要知道那些内容是对应于task的,那些内容是对应于risk的等等。
你给的表达式是针对AAAA,BBBB,CCCC的,其实他们是单独的一个单词,我需要解析出:
task是什么(如下):
Task:
1. task a1 done.
2. task a2 done.
goals是什么(如下):
Goals:
1. task b1 done.
2. task b2 done.
risk是什么(如下)
risk:
N/A
然后把他们存到数据库中对应的task,goals,risk的字段里。
我试了你给的表达式,还不能正确解析出我要的内容,你愿意再帮我写一个吗?多谢
问题补充:
我之前曾经考虑过这个办法,但是在两个标题之间的内容可能包含标题本身,我没有找到更好的方法解决,所以才转而寻求用正则表达式来解决。
其实我的这个周报内容是通过email解析得到的,目前我只是能提前出这个周报的整个内容(用户通过outlook或者Blackberry发送的,这个解析后的字符串中已经包括了回车/换行符号),但是我需要知道具体的各个部分的任务完成情况,然后存到相应的数据库字段里(便于日后统计)。
不知道我是否把我的需求已经描述清楚了,呵呵。
多谢你的回复,我会重新考虑你的建议,不过还需要测试一下。
2008年10月16日 04:38

3个答案 按时间排序 按投票排序

0 0

其实解析这个工作,有时候用正则表达式方便,但有些时候可能换种方式去解析要好点,特别我个人认为你这个里面是解析周报,是个文件,可能以后文件格式发生变化什么的,又要改正则表达式,还不如专门构造一个解析器,以后只要修改某些接口,或者说是判断标志就可以了,这样不是很方便吗?呵呵个人建议,仅供参考

2008年10月17日 17:48
0 0

其实没有必要用正则表达式啊,如果你报表格式是固定了,按行读文件,解析不是更快更简单。
我的想法如下:

public class ReportParser {
	private int maxTitleLength;
	private String splitStr;

	private String[] reportContent;

	public ReportParser(int maxTitleLength, String splitStr, String[] report) {
		this.maxTitleLength = maxTitleLength;
		this.splitStr = splitStr;
		this.reportContent = report;
	}

	public boolean parse() {
		//第一个title
		int start = getTitleLine(0,reportContent);
		int next=-1;
		while(start!=-1){
			next = getTitleLine(start+1,reportContent);
			parseContent(start,next);
		}
		return true;
	}

	private boolean parseContent(int start,int end){
		if(start>=end||start==-1||end==-1){
			return false;
		}else{
			//在这里对解析出来的数据进行处理,一个title对应一个content
			String title = reportContent[start];
			StringBuffer content = new StringBuffer();
			for(int i = start+1;i < end;i++){
				content.append(reportContent[i]).append("\n");
			}
			return true;
		}
	}
	
	private int getTitleLine(int start, String[] content) {
		if (start < 0 || content == null)
			return -1;
		for (int i = start; i < content.length; i++) {
			if (content[i].trim().length() == 0)
				// 跳过空行
				continue;
			if (content[i].trim().indexOf(splitStr) != -1
					&& content[i].trim().length() <= maxTitleLength)
				return i;
		}
		return -1;
	}

	
	public void setReportContent(String[] content){
		this.reportContent = content;
	}
}

2008年10月17日 17:45
0 0

(?<=([A|B|C]{4}:))(?s).*?(?=([[A|B|C]{4}:|\\*\\*end\\*\\*]))
试试这个行不行。“哪个组和AAAA对应或BBBB对应等”有点不明白你的意思

2008年10月16日 10:52

相关推荐

    Java使用正则表达式提取XML节点内容的方法示例

    Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在Java中,可以使用正则表达式来提取XML节点内容。下面是一个简单的示例: ```java public ...

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    使用Java正则表达式分析处理日志

    本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...

    Java根据正则表达式生成字符串—Xeger,automaton

    在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...

    java 字符串 正则表达式 详细实例代码

    - 正则表达式是一种模式匹配工具,用于字符串搜索、替换和提取。Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`...

    Java正则表达式 Java 正则表达式

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    JAVA正则表达式大全

    在Java编程语言中,正则表达式被广泛应用于数据验证、文本提取和字符串操作。以下是对这些文档标题所涉及的Java正则表达式知识点的详细解释: 1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,...

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    C#字符串和正则表达式参考手册

    特别是在处理文本操作时,字符串和正则表达式是两个至关重要的概念。本文将深入探讨C#中的字符串操作和正则表达式使用,帮助你更好地理解和运用这些工具。 一、C#字符串 1. 字符串基础:在C#中,字符串是不可变...

    Java 正则表达式判断字符串是否包含中文

    通过本文的学习,我们不仅了解了如何使用 Java 的正则表达式来判断一个字符串中是否包含中文字符,还深入了解了 Java 中正则表达式的相关 API 和基本原理。这对于从事 Java 开发的技术人员来说是非常实用且必要的...

    Java正则表达式_动力节点Java学院整理

    Java正则表达式是Java语言中的一种模式匹配技术,用于匹配、查找、替换和判断字符串。它是一种强大的工具,能够帮助开发者快速处理字符串相关的任务。 什么是正则表达式? 正则表达式是一种特殊的字符串,用于描述...

    jJAVA正则表达式替换字符

    其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"&lt;title&gt;XXXX&lt;/title&gt;"中的文字XXXX,用正则表达式获取指定字符串内容中的指定内容,...

    Java正则表达式.ppt

    Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...

    常用正则表达式HTML,JAVA合集

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、数据提取等IT领域。在这个“常用正则表达式HTML,JAVA合集”中,我们主要关注的是HTML和Java环境下的正则...

    java正则表达式验证IP地址

    正则表达式的作用是将字符串分割成多个小组,并通过这些小组来匹配指定的模式。在Java中,我们可以使用java.util.regex包来使用正则表达式。在这个包中,有两个主要的类:Pattern和Matcher。 Pattern类是正则...

    java正则表达式匹配全角空格

    本文介绍了如何使用Java中的`split()`方法和正则表达式来处理包含全角空格和半角空格的字符串。通过合理运用正则表达式和Java内置方法,我们可以有效地解决这类问题。希望本文能够对你有所帮助!

    JAVA正则表达式的应用

    如果包含请将其在控制台打印出来 否则输出不包含字符串 回到第一步"&gt;JAVA正则表达式应用:任意输入一串字符串 如何输入exit退出程序;从输入的字符串中判断是否包含手机号码 正则表达式可以使用&quot; +86| 86 1 d{...

    java正则表达式 过滤特殊字符的正则表达式

    Java 正则表达式是 Java 语言中的一种强大的文本处理工具,能够对字符串进行复杂的匹配、提取和替换操作。本文将详细介绍 Java 正则表达式在过滤特殊字符方面的应用。 过滤特殊字符的正则表达式 在 Java 中,使用...

    java 正则表达式应用jar包 regex-smart.jar

    正则表达式(Regular Expression,简称regex)是一串由字符和特殊符号组成的字符串,用于定义字符串模式。这些模式可以用来检查一个字符串是否符合特定的格式,或者从中提取符合模式的子串。在Java中,主要通过...

    详解Java判断是否是整数,小数或实数的正则表达式

    在Java中使用正则表达式来判断字符串是否符合整数、小数或实数的格式是一种常见且有效的做法。在编程中,我们经常需要对输入的字符串进行格式验证,以确保它们符合预期的数值格式,尤其是在处理财务数据、用户输入...

Global site tag (gtag.js) - Google Analytics