-
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个答案 按时间排序 按投票排序
-
其实解析这个工作,有时候用正则表达式方便,但有些时候可能换种方式去解析要好点,特别我个人认为你这个里面是解析周报,是个文件,可能以后文件格式发生变化什么的,又要改正则表达式,还不如专门构造一个解析器,以后只要修改某些接口,或者说是判断标志就可以了,这样不是很方便吗?呵呵个人建议,仅供参考
2008年10月17日 17:48
-
其实没有必要用正则表达式啊,如果你报表格式是固定了,按行读文件,解析不是更快更简单。
我的想法如下: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
-
(?<=([A|B|C]{4}:))(?s).*?(?=([[A|B|C]{4}:|\\*\\*end\\*\\*]))
试试这个行不行。“哪个组和AAAA对应或BBBB对应等”有点不明白你的意思2008年10月16日 10:52
相关推荐
Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在Java中,可以使用正则表达式来提取XML节点内容。下面是一个简单的示例: ```java public ...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
- 正则表达式是一种模式匹配工具,用于字符串搜索、替换和提取。Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`...
Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...
在Java编程语言中,正则表达式被广泛应用于数据验证、文本提取和字符串操作。以下是对这些文档标题所涉及的Java正则表达式知识点的详细解释: 1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,...
Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...
特别是在处理文本操作时,字符串和正则表达式是两个至关重要的概念。本文将深入探讨C#中的字符串操作和正则表达式使用,帮助你更好地理解和运用这些工具。 一、C#字符串 1. 字符串基础:在C#中,字符串是不可变...
通过本文的学习,我们不仅了解了如何使用 Java 的正则表达式来判断一个字符串中是否包含中文字符,还深入了解了 Java 中正则表达式的相关 API 和基本原理。这对于从事 Java 开发的技术人员来说是非常实用且必要的...
Java正则表达式是Java语言中的一种模式匹配技术,用于匹配、查找、替换和判断字符串。它是一种强大的工具,能够帮助开发者快速处理字符串相关的任务。 什么是正则表达式? 正则表达式是一种特殊的字符串,用于描述...
其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定字符串内容中的指定内容,...
Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、数据提取等IT领域。在这个“常用正则表达式HTML,JAVA合集”中,我们主要关注的是HTML和Java环境下的正则...
正则表达式的作用是将字符串分割成多个小组,并通过这些小组来匹配指定的模式。在Java中,我们可以使用java.util.regex包来使用正则表达式。在这个包中,有两个主要的类:Pattern和Matcher。 Pattern类是正则...
本文介绍了如何使用Java中的`split()`方法和正则表达式来处理包含全角空格和半角空格的字符串。通过合理运用正则表达式和Java内置方法,我们可以有效地解决这类问题。希望本文能够对你有所帮助!
如果包含请将其在控制台打印出来 否则输出不包含字符串 回到第一步">JAVA正则表达式应用:任意输入一串字符串 如何输入exit退出程序;从输入的字符串中判断是否包含手机号码 正则表达式可以使用" +86| 86 1 d{...
Java 正则表达式是 Java 语言中的一种强大的文本处理工具,能够对字符串进行复杂的匹配、提取和替换操作。本文将详细介绍 Java 正则表达式在过滤特殊字符方面的应用。 过滤特殊字符的正则表达式 在 Java 中,使用...
正则表达式(Regular Expression,简称regex)是一串由字符和特殊符号组成的字符串,用于定义字符串模式。这些模式可以用来检查一个字符串是否符合特定的格式,或者从中提取符合模式的子串。在Java中,主要通过...
在Java中使用正则表达式来判断字符串是否符合整数、小数或实数的格式是一种常见且有效的做法。在编程中,我们经常需要对输入的字符串进行格式验证,以确保它们符合预期的数值格式,尤其是在处理财务数据、用户输入...