我正在尝试解析由许多部分组成的文档。
每个部分均以
:[]:
开头,后跟空格,然后是 1 个或多个字符(任何字符),最后是 :
、空格和一个或多个字符(任何字符)。
这是一个例子:
:[]: Abet1, Abetted34: Find the usage in table under section 1-CB-45: Or more info from the related section starting with PARTIE-DU-CORPS.
:[]: Ou est-ce que tu a mal: Tu as mal aux jambes: Find usage in section 145-TT-LA-TETE.
每个部分的感兴趣标记是从
:[]:
到第一次出现 :
的所有内容。例如,在第一部分中,我只对提取感兴趣::[]: Abet1, Abetted34:
首先,我使用以下模式查找器从文档的每个部分中提取标记,但这提取了该部分中从第一次出现
:
到最后一次出现 :
的所有内容:
"\\B:\\[\\]:.*:\\B"
如果我将模式查找器更改为以下内容以将标记从
:[]:
提取到第一次出现 :
,我将没有匹配到:
"\\B:\\[\\]:\\s*.:{1}"
提取我想要的内容的正则表达式会是什么样子?
这就是你想要的吗?
查看更多:https://regex101.com/r/jOmnSb/2
或者
查看更多:https://regex101.com/r/jOmnSb/3
更新:
您可以在此处将正则表达式转换为 Java 正则表达式:https://www.regexplanet.com/advanced/java/index.html
所以你想匹配一个字符串:
:[]:_
(其中 _
是空格字符):
的字符(请参阅 this 问题):
字符结束比赛其正则表达式为:
:\[\]: [^:]+:
将正则表达式模式转换为 Java 时,必须转义
\
字符。你可以这样做:
import java.util.regex.*;
public class MatchTest {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(":\\[\\]: [^:]+:", Pattern.CASE_INSENSITIVE);
Matcher matcher =
pattern.matcher(
":[]: Abet1, Abetted34: Find the usage in table under section 1-CB-45: Or more info from the related section starting with PARTIE-DU-CORPS.\n"
+ ":[]: Ou est-ce que tu a mal: Tu as mal aux jambes: Find usage in section 145-TT-LA-TETE."
);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}