用于从特定文件中提取信息的正则表达式

时间:2012-04-12 13:04:17

标签: java regex

对于作业,我需要从文件中提取某些信息(在java中),文件中的文字与此类似:

OFFICE_MANAGEMENT =     Higher ManagementCONSTRUCTION = SupervisorCONTRACT_MANAGEMENT = Contract ManagerPROJECT =   Project ManagerLOCATION = User Specified LocationDEPARTMENT = Local.........    

我需要提取每个特定项目

我对正则表达式几乎没有经验,但我尝试过。

如果我使用

之类的东西
OFFICE_MANAGEMENT =\s*([a-z A-Z]*)\s*   

我得到了

Higher ManagementCONSTRUCTION 

结果。我可能不会改变文字:(

我怎样才能确保他在下一个项目之前完成任务。我以为他需要阅读所有内容,直到下一个单词有一个以上的Captital字母,但我不知道该怎么做。

所以任何帮助或建议都会受到欢迎

2 个答案:

答案 0 :(得分:3)

假设键是全大写的(可能还有下划线):

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile(
    "([\\p{Lu}_]+)  # one or more characters, all caps and underscores\n" +
    "\\s*=\\s*      # equals sign, possibly surrounded by whitespace\n" +
    "([^=]+)        # any letters except equals sign\n" +
    "(?<=\\p{Ll})   # but only until the last lowercase letter", 
    Pattern.COMMENTS);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
} 

将您的字符串分隔为

OFFICE_MANAGEMENT =     Higher Management
CONSTRUCTION = Supervisor
CONTRACT_MANAGEMENT = Contract Manager
PROJECT =   Project Manager
LOCATION = User Specified Location
DEPARTMENT = Local

(对于每个匹配,regexMatcher.group(1)包含标题,regexMatcher.group(2)包含说明。)

答案 1 :(得分:2)

尝试类似

的内容
[A-Z_]+\s*=\s*(?:\s?[A-Z][a-z]+)+

here on Regexr

这将匹配在=之前由大写和下划线组成的单词以及以大写字母开头并且随后是小写的等号之后的一个或多个单词。

这里是Java Unicode版本:

String text = "OFFICE_MANAGEMENT =     Higher ManagementCONSTRUCTION = SupervisorCONTRACT_MANAGEMENT = Contract ManagerPROJECT =   Project ManagerLOCATION = User Specified LocationDEPARTMENT = Local";

Pattern p = Pattern
            .compile("[\\p{Lu}\\p{Pc}]+\\s*=\\s*(?:\\s?\\p{Lu}\\p{Ll}+)+");
Matcher m = p.matcher(text);
while(m.find()){
    System.out.println(m.group(0));
}

\\p{Lu}带有属性大写字母

的Unicode代码点

\\p{Ll}带有小写字母属性的Unicode代码点

\\p{Pc}标点字符,例如连接字词的下划线

有关Unicode code properties的详细信息,请参阅此处。