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でそれを参照してください

これは、大文字とアンダースコアで構成される=単語と、大文字で始まり、その後に小文字が続く等号の後の1つ以上の単語と一致します。

そしてここにJavaUnicodeバージョンがあります:

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 に答える