![](/img/trans.png)
[英]Cannot match string with regex pattern when such string is done of multiple lines
[英]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次以外的任何字符和正斜杠。 例如:
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.