-
java正则表达式实现字符串匹配5
问题描述:
resultStr = "@inproceedings{1031197, author = {S. Alireza Aghili and Divyakant Agrawal and Amr El Abbadi}, title = {Protein structure alignment using geometrical features}, booktitle = {CIKM '04: Proceedings of the thirteenth ACM international conference on Information and knowledge management}, year = {2004}, isbn = {1-58113-874-1}, pages = {148--149}, location = {Washington, D.C., USA}, doi = {http://doi.acm.org/10.1145/1031171.1031197}, publisher = {ACM}, address = {New York, NY, USA}, },"
要将resultStr中{}内部的内容识别出来,并与 = 前的内容匹配。即得到
author的值为S. Alireza Aghili and Divyakant Agrawal and Amr El Abbadi,
title的值为Protein structure alignment using geometrical features,等等。
我的做法有些问题,运行结果不正确,请大家指点,谢谢!
/**
* 对BitTex输出格式识别
*
*/
public static GlobalMode bitTex_identify(String resultStr) {
GlobalMode obj = new GlobalMode();
Pattern p = Pattern.compile("(\\s[\\w]+\\s=)(\\s\\{.*?},)");
Matcher m = p.matcher(resultStr);
String reStr[] = new String[100];
int i = 0;
while (m.find()) {
i++;
reStr[i] = (m.group(1) + m.group(2)).trim();
String value = reStr[i].substring(reStr[i].indexOf("{") + 1,
reStr[i].lastIndexOf("}"));
if(reStr[i].startsWith("author")){
obj.setAuthor(value);
continue;
}
if (reStr[i].startsWith("title")) {
obj.setTitle(value);
continue;
}
if (reStr[i].startsWith("journal")) {
obj.setJournal(value);
continue;
}
if (reStr[i].startsWith("booktitle")) {
obj.setBooktitle(value);
continue;
}
if (reStr[i].startsWith("year")) {
obj.setYear(value);
continue;
}
if (reStr[i].startsWith("month")) {
obj.setMonth(value);
continue;
}
if (reStr[i].startsWith("pages")) {
obj.setPages(value);
continue;
}
if (reStr[i].startsWith("volume")) {
obj.setVolume(value);
continue;
}
if (reStr[i].startsWith("number")) {
obj.setNumber(value);
continue;
}
if (reStr[i].startsWith("publisher")) {
obj.setPublisher(value);
continue;
}
if (reStr[i].startsWith("location")) {
obj.setLocation(value);
continue;
}
if (reStr[i].startsWith("addresultStrss")) {
obj.setAddress(value);
continue;
}
if (reStr[i].startsWith("isbn")) {
obj.setIsbn(value);
continue;
}
if (reStr[i].startsWith("doi")) {
obj.setDoi(value);
continue;
}
if(reStr[i].startsWith("issue_description")){
obj.setTitle(value);
continue;
}
if(reStr[i].startsWith("issue_date")){
obj.setYear(value);
//obj.setYear(value.substring(value.indexOf(" ")));
continue;
}
}
return obj;
}
补充: 1、感觉这么写if语句太繁琐,但不知道怎么改。
2、程序其它地方要用到返回的author,title等值,如:要用参考文献的格式将这些值打印出来。
问题补充:
不好意思,之前我说的问题不清楚。我是在得到这样的数据之后需要再处理
author =S. Alireza Aghili and Divyakant Agrawal and Amr El Abbadi
title =Protein structure alignment using geometrical features
booktitle =CIKM '04: Proceedings of the thirteenth ACM international conference on Information and knowledge management
year =2004
...
最终目的是能随意调用author,title 这些值。如:要用参考文献的格式将这些值打印出来。
问题补充:
您所说的数据项是指author这些么?
那是不是还要用if-else语句来判断?
问题补充:
Sorry,我总是表达的不够清楚。
我是想定义一个实例obj,将author,title这些对应的值分别赋值给obj.author, obj.title等,最后可以随意调用obj.author, obj.title。
我的代码基本上能实现这个功能,但是觉得用这么多的if-else语句有些繁琐,是否有简单高效的实现方法呢?请指教,谢谢~2009年2月20日 21:19
5个答案 按时间排序 按投票排序
-
采纳的答案
String resultStr ="字符串"; Pattern p = Pattern.compile("[\\s\\t]+([\\w\\s]+)=[\\s]+\\{([^}]+)\\}"); Map tmpMap = new HashMap(); Matcher m = p.matcher(resultStr); while(m.find()){ String key=m.group(1); String value=m.group(2); System.out.println(key+"="+value); tmpMap.put(key,value); } GlobalMode obj = new GlobalMode(); obj.setAuthor(tmpMap.get("author")); obj.setTitle(tmpMap.get("title")); ....
上面写错了个变量名. ..这样才对.2009年2月24日 08:44
-
String resultStr ="字符串"; Pattern p = Pattern.compile("[\\s\\t]+([\\w\\s]+)=[\\s]+\\{([^}]+)\\}"); Map tmpMap = new HashMap(); Matcher m = p.matcher(resultStr); while(m.find()){ String key=m.group(1); String value=m.group(2); System.out.println(key+"="+value); m.put(key,value); } GlobalMode obj = new GlobalMode(); obj.setAuthor(m.get("author")); obj.setTitle(m.get("title")); ....
这样不行? 不明白为什么非要添加 if -else?2009年2月24日 08:43
-
正则应该可以,给你写了个.你试试看.
String resultStr = "@inproceedings{1031197, author = {S. Alireza Aghili and Divyakant Agrawal and Amr El Abbadi}, title = {Protein structure alignment using geometrical features}, booktitle = {CIKM '04: Proceedings of the thirteenth ACM international conference on Information and knowledge management}, year = {2004}, isbn = {1-58113-874-1}, pages = {148--149}, location = {Washington, D.C., USA}, doi = {http://doi.acm.org/10.1145/1031171.1031197}, publisher = {ACM}, address = {New York, NY, USA}, }," ; Pattern p = Pattern.compile("[\\s\\t]+([\\w\\s]+)=[\\s]+\\{([^}]+)\\}"); Matcher m = p.matcher(resultStr); while(m.find()){ System.out.println(m.group(1)+"="+m.group(2)); }
2009年2月22日 16:31
相关推荐
虽然RE2J主要设计用于正则表达式的匹配,但通过它的内部机制,我们可以间接地实现字符串生成。 下面是一个基于RE2J和有限自动机生成字符串的例子: ```java import com.google.re2j.Pattern; import ...
本文将详细介绍如何使用Java正则表达式进行字符串替换,并通过具体的代码示例来展示其实现过程。 #### 二、基础知识 ##### 1. 正则表达式简介 正则表达式(Regular Expression),通常被简称为regex或regexp,是一...
本资源文件是我自己总结的,其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定...
下面将详细阐述正则表达式的概念、语法以及如何在不同编程语言中实现字符串的拆分。 1. 正则表达式基础 - **模式匹配**:正则表达式由一系列字符和特殊符号组成,用于定义一个模式,该模式可以匹配特定的字符串。 ...
### Java正则表达式判断字符串是否包含中文 在日常的软件开发过程中,我们经常会遇到需要对输入的字符串进行校验的情况。例如,在处理用户输入、文本分析或数据清洗时,可能需要判断一个字符串中是否包含中文字符。...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...
java 利用正则表达式从字符串中提取省、市、区、镇、乡等区域名称(包含少数民族地区),支持地址中无省,无市,无县情况。
Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...
Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...
### 常用Java正则表达式知识点 #### 一、引言 正则表达式是一种强大的工具,用于处理文本并查找模式。多种编程语言,包括Perl、PHP、Python、JavaScript以及Java等均内置了对正则表达式的支持。本文将详细介绍Java...
本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...
`Pattern`类用于编译正则表达式字符串,而`Matcher`类用于执行与字符串的匹配操作。 #### 三、身份证号码的格式规则 1. **长度**:15位或18位。 2. **前17位**:均为数字。 3. **第18位**: - 对于18位身份证号码...
以下是对这些文档标题所涉及的Java正则表达式知识点的详细解释: 1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,包括元字符、字符类、量词和分组。元字符如`.`代表任意字符,`^`表示行首,`$`...
这个合集提供的HTML和Java正则表达式实例,为开发者提供了一个快速参考的工具,帮助他们在开发过程中快速有效地实现数据验证功能。理解并熟练运用这些正则表达式,对于提高代码质量和用户体验都有极大的帮助。在实际...
Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...
Java正则表达式验证IP地址 Java正则表达式验证IP地址是指使用Java语言中的正则表达式来验证IP地址是否符合标准。IP地址是指在网络通信中用来标识设备的地址,它是一种逻辑地址,通过它可以找到网络中的设备。在...
### Java正则表达式匹配全角空格 在Java编程中,处理字符串是非常常见的需求之一。其中,使用正则表达式来对字符串进行拆分、替换等操作是一种非常高效的方法。本文将详细介绍如何使用Java中的`split()`方法,并...
1. 字符串匹配:用于判断一个字符串是否符合某种模式。 2. 字符串查找:用于在一个字符串中查找某个模式。 3. 字符串替换:用于将一个字符串中的某个模式替换为另一个字符串。 4. 字符串判断:用于判断一个字符串...
Java 正则表达式是 Java 语言中的一种强大的文本处理工具,能够对字符串进行复杂的匹配、提取和替换操作。本文将详细介绍 Java 正则表达式在过滤特殊字符方面的应用。 过滤特殊字符的正则表达式 在 Java 中,使用...