0

对于作业,我需要从文件中提取某些信息(在 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 

结果。我可能不会更改文本:(

我怎样才能确保他把所有东西都拿走,直到下一个项目。我在想他需要阅读所有内容,直到下一个单词超过一个大写字母,但我不知道该怎么做。

因此,任何帮助或建议都将受到欢迎

4

2 回答 2

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)描述。)

于 2012-04-12T13:17:40.380 回答
2

尝试类似的东西

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

在 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 代码属性的更多详细信息,请参见此处。

于 2012-04-12T13:13:41.523 回答