Java从长文本中检测特殊模式

标签 java android regex

我正在读取 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/

相关文章:

java - 获取recyclerView中选择的id

android - 如何为不同的用户设置不同的 Android Firebase 书签内容?

正则表达式源代码文件

java - 比较两种反向链表算法内部的空间复杂度

java - 在 TeeChart 中绘制 Graphics3D

java - 在 webview 中更改字体

android - 'setConfigSettings(FirebaseRemoteConfigSettings!): Unit' is deprecated

用于匹配带转义引号的引号字符串的 Java 正则表达式

JavaScript 替换问题

java - 如何在 Spring JPA Repository 方法中使用 @Query 注释来描述连接