Java Regex格式字符串



我是Java和regex的新手。我正在尝试从以下字符串中提取数据:

JAMMURI YA KENYA ¢)a(s REPUBLIC OF KENYA
sennc wnecs: 23085129 aShl e 31662252
FULL NAMES
JUDITH AWINO OWITI
DATE OF BIRTH
25. 10. 1992
SEX
FEMALE
DISTRICT OF BIRTH
MUHORONI
PLACE OF ISSUE
. NYANDO
DATE OF ISSUE
' 16.04. 2013 A
j HOLDER'S SIGN oo - Ve

其中:23085129 = IDNumber, 31662252 = SerialNumber, JUDITH AWINO OWITI = Name, 25. 10. 1992 = DateOfBirth

这是我的代码:

static HashMap<String, String> interpretText(String ocrText) {
HashMap<String, String> result = new HashMap<String, String>();
result.put("Text", ocrText);
for (String text : ocrText.split("\r?\n")) {      
//Get ID Only
String pattern = "\s+([0-9]{9})";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
if (m.find()) {
System.out.println("IDNumber: " + m.group(0) );
result.put("IDNumber", m.group(0));
}
// Get all other numbers
pattern  = "(\d+)(.*)";
r = Pattern.compile(pattern);
m = r.matcher(text);
if (m.find()) {
System.out.println("Found value: " + m.group() );
}
}
return result;
}

我的挑战是如何从字符串中提取上述关键数据项。我的regex实现不起作用。循环中23085129 = IDNumber, 31662252 = SerialNumber, JUDITH AWINO OWITI = Name, 25. 10. 1992 = DateOfBirth的正确regex实现是什么?

试试这个表达式:

(?:.*)s(d+)[ws]+s(d+)WFULL NAMESW([ws]+)WDATE OF BIRTHW([d.s]+)

在这里你可以看到它是如何工作的:https://regexr.com/51f5v

Java示例:

String data = "JAMMURI YA KENYA ¢)a(s REPUBLIC OF KENYAn" +
"sennc wnecs: 23085129 aShl e 31662252n" +
"FULL NAMESn" +
"JUDITH AWINO OWITIn" +
"DATE OF BIRTHn" +
"25. 10. 1992n" +
"SEXn" +
"FEMALEn" +
"DISTRICT OF BIRTHn" +
"MUHORONIn" +
"PLACE OF ISSUEn" +
". NYANDOn" +
"DATE OF ISSUEn" +
"' 16.04. 2013 An" +
"j HOLDER'S SIGN oo - Ve";
Pattern pattern = Pattern.compile("(?:.*)\s(\d+)[\w\s]+\s(\d+)\WFULL NAMES\W([\w\s]+)\WDATE OF BIRTH\W([\d.\s]+)");
Matcher matcher = pattern.matcher(data);
if (matcher.find()) {
System.out.println("IDNumber: " + matcher.group(1));
System.out.println("SerialNumber: " + matcher.group(2));
System.out.println("Name: " + matcher.group(3));
System.out.println("DateOfBirth: " + matcher.group(4));
}

输出:

IDNumber: 23085129
SerialNumber: 31662252
Name: JUDITH AWINO OWITI
DateOfBirth: 25. 10. 1992

最新更新