繁体   English   中英

正则表达式匹配多行中的字符串模式

[英]Regex to match string pattern in multi lines

我试图从pdf中提取文本。 但提取的文本不符合要求。 所以我正在编写正则表达式来提取和使用它。 由于我是新写的正则表达式,并且在文本中处理多行,我面临着问题。 可能有人帮忙。 String文本是这样的:stringtext = 0,10 - 0,20 0,30 - 0,40,0,50 - 0,60(第1行)A(第2行)/(第3行)B(第4行) /(第5行)C(第6行)/(第7行)D(第8行)/(第9行)

我的目标是从字符串文本中仅提取ABCD。 可能有人帮忙。 谢谢!

我尝试过研究,但我找不到适合我的解决方案。

    stringtext = 0,10 - 0,20 0,30 - 0,40, 0,50 - 0,60
                 A
                 /
                 B
                 /
                 C
                 /
                 D
                 /;
   Pattern pattern = pattern.compile(".*\\r\\n(\\_.*)$");
   Matcher matcher = pattern.matcher(stringtext);
   if(matcher.find()){
    System.out.println(matcher.group(1);
   }

预期产出应为ABCD

如果你想使用.*来匹配第一行,你可以通过例如第一个数字的模式启动它来使匹配更具体一些。

您可以使用\\G锚点来获取重复匹配并匹配捕获组中的大写字符。

(?:^\d+,\d+.*|\G(?!^))\R\h+([A-Z])\R.*\/

说明

  • (?:非捕获组
    • ^\\d+,\\d+.*从字符串1+位,逗号和1+位开头匹配
    • | 要么
    • \\G(?!^)在上一场比赛结束时断言位置,而不是在开始时
  • )关闭非捕获组
  • \\R\\h+匹配unicode换行符序列和1+个水平空白字符
  • ([AZ])捕获组1中的大写字符
  • \\R.*\\/匹配unicode换行符序列,除换行符0次以外的任何字符和正斜杠。

正则表达式演示 | Java演示

例如:

String regex = "(?:^\\d+,\\d+.*|\\G(?!^))\\R\\h+([A-Z])\\R.*\\/";
String stringtext = "0,10 - 0,20 0,30 - 0,40, 0,50 - 0,60\n"
     + "                     A\n"
     + "                     /\n"
     + "                     B\n"
     + "                     /\n"
     + "                     C\n"
     + "                     /\n"
     + "                     D\n"
     + "                     /;";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(stringtext);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

结果

A
B
C
D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM