【发布时间】:2023-04-08 02:43:01
【问题描述】:
我是 Java 和正则表达式的新手。我正在尝试从以下字符串中提取数据:
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;
}
我的挑战是如何从字符串中提取上述关键数据项。我的正则表达式实现不起作用。循环中23085129 = IDNumber, 31662252 = SerialNumber, JUDITH AWINO OWITI = Name, 25. 10. 1992 = DateOfBirth 的正确正则表达式实现是什么?
【问题讨论】:
-
您可以只使用一个模式:
[^\n]+\n[^\n\d]+(\d+)[^\n\d]+(\d+)\nFULL NAMES\n([^\n]+)\nDATE OF BIRTH\n([^\n]+)其中matcher.group(1)是IDNumber,2是SerialNumber,3是Name和4@ 987654334@。 Demo -
感谢您的协助。它运作良好。那很顺利。问候。
-
@CheruiyotFelix 这些字符串总是在那里吗?
sennc wnecs:和aShl e? -
感谢@Thefourthbird - 我会在扫描更多数据时尝试一下。