我正在读取 Aadhar 卡和 Pan 卡中的文本,并且正在读取字符串下方。
छ र्णां ;; _,
ज्यो
हें ष्ठछ्येप् ऽठमांआ (38७/8र्क्स "
,; जन्म वर्ष / 78६" ०1‘8६र्णीग् : 1992 खा … खा
पुरुष‘ “'व्'व् हैंप्टेंग्‘
` हु; ";:ळुहुं क्रौं र्मं’फु. ‘_य्; ,; ळु
` हं ` .म्च्हें :: "…. 'दृर्दु‘ऱ्क्ष्क्त
» ॰ -। "' ॰॰ ’ '|’ ""
8471 2211 6099 ,_
我有两项任务要做 - 1.检测是否有aadhar卡。 2. 如果是,则表示否。
我尝试过的代码
String data = "b dn b fsd b fsd 6666 8888 9999 bsnfbsdb";
Pattern p = Pattern.compile( "^[a-zA-Z ]*\\d{4}\\s\\d{4}\\s\\d{4}[a-zA-Z ]*$" );
Matcher m = p.matcher( data );
if ( m.find() ) {
String s = m.group(0);
System.out.println(s);
}
但它不起作用,我得到了整个字符串
有没有更好的解决方案?或者我做错了什么? 提前致谢。
最佳答案
您可以使用
(?<!\d)\d{4}(?:\s\d{4}){2}(?!\d)
请参阅regex demo .
详细信息
-
(?<!\d)
- 紧邻左侧的数字不允许 -
\d{4}
- 四位数字 -
(?:\s\d{4}){2}
- 两次重复空格和四位数字 -
(?!\d)
- 不允许紧接右边的数字
请参阅Java demo :
String data = "b dn b fsd b fsd 6666 8888 9999 bsnfbsdb";
Pattern p = Pattern.compile( "(?<!\\d)\\d{4}(?:\\s\\d{4}){2}(?!\\d)" );
Matcher m = p.matcher( data );
String s = "";
if ( m.find() ) {
s = m.group(0);
}
System.out.println("Result: " + s); // => Result: 6666 8888 9999
关于Java从长文本中检测特殊模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57685140/