我试图弄清楚正则表达式将提取这些命名组,每个组都在一个单独的行上。试过不同的组合,但我被卡住了。例如,我无法提取localityDefault但得到:
hasData false
patternMatch7()null
public static void main(String[] args) throws Exception {
String patternOfData = ".*?orgUnit1Default=(?<orgUnit1Default>\\S+)\\s+" +
"orgUnit2Default=(?<orgUnit2Default>\\S+)\\s+" +
"organizationDefault=(?<organizationDefault>\\S+)\\s+" +
"localityDefault=(?<localityDefault>\\S+)\\s+?" +
"stateDefault=(?<stateDefault>\\S+)\\s+?" +
"countryDefault=(?<countryDefault>\\S+)\\s+";
String receivedDataString = "orgUnit1Default=window washers \n"
+ "orgUnit2Default=All Cleaners \n"
+ "organizationDefault=Cleaning Dept \n"
+ "localityDefault=Small Town Here\n"
+ "stateDefault=Washington\n"
+ "countryDefault=US";
String toExtractName = "organizationDefault";
System.out.println("patternMatch7() "
+ patternMatch7(patternOfData, receivedDataString,
toExtractName));
}
static String patternMatch7(String patternOfData,
String receivedDataString, String toExtractName) throws IOException {
Pattern dataExtractionPattern;
dataExtractionPattern = Pattern.compile(patternOfData, Pattern.DOTALL);
Matcher matcher = dataExtractionPattern.matcher(receivedDataString);
boolean hasData = false;
String dataValue = null;
if (matcher.find()) {
hasData = true;
dataValue = matcher.group(toExtractName);
}
System.out.println("hasData " + hasData);
return dataValue;
}
答案 0 :(得分:1)
我不确定您的数据看起来如何,但您可以尝试使用此正则表达式吗?
String patternOfData = ".*?orgUnit1Default=(?<orgUnit1Default>.+)\\s*\n" +
"orgUnit2Default=(?<orgUnit2Default>.+)\\s*\n" +
"organizationDefault=(?<organizationDefault>.+)\\s*\n" +
"localityDefault=(?<localityDefault>.+)\\s*\n" +
"stateDefault=(?<stateDefault>.+)\\s*\n" +
"countryDefault=(?<countryDefault>.+)";
答案 1 :(得分:0)
你的模式假设换行前有空格,但是地址在换行前没有空格 - 使用*代替+
+ "organizationDefault=Cleaning Dept \n" ^ space character + "localityDefault=Small Town Here\n" ^ no space character...
为什么不使用LDAP搜索?