我正在尝试从pdf中提取文本。但是提取的文本不正确。因此,我正在编写正则表达式以提取和使用它。由于我刚开始编写正则表达式并处理文本中的多行,因此我遇到了问题。可以帮个忙。 字符串文本是这样的: 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行)
我的目标是从字符串文本中仅提取A B C D。可以帮个忙。谢谢!
我尝试进行研究,但找不到适合我的解决方案。
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);
}
预期输出应为A B C D
答案 0 :(得分:0)
如果您想使用.*
来匹配第一行,则可以通过以第一个数字的模式开头来使匹配更加具体。
您可以利用\G
锚获得重复的匹配并匹配捕获组中的大写字符。
(?:^\d+,\d+.*|\G(?!^))\R\h+([A-Z])\R.*\/
说明
(?:
非捕获组
^\d+,\d+.*
从字符串1+个数字,逗号和1+个数字的开头开始匹配|
或\G(?!^)
在上一场比赛的末尾而不是在开始时断言)
关闭非捕获组\R\h+
匹配unicode换行符序列和1+个水平空格字符([A-Z])
在组1中捕获大写字符\R.*\/
匹配unicode换行符序列,除换行符0+次和正斜杠以外的任何字符。例如:
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