我正在尝试分析包含许多部分的文档。
每个部分均以:[]:
开头,后跟空格,然后是1个或多个字符(任何字符),再后跟:
个空格和一个或多个字符(任何字符)。 / p>
这是一个例子:
:[]: 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}"
提取我想要的内容的正则表达式将如何显示?
答案 0 :(得分:3)
这就是你想要的吗?
查看更多:https://regex101.com/r/jOmnSb/2
或
查看更多:https://regex101.com/r/jOmnSb/3
更新:
您可以在这里将正则表达式转换为Java正则表达式:https://www.regexplanet.com/advanced/java/index.html
答案 1 :(得分:3)
所以您要匹配以下字符串:
:[]:_
(其中_
是空格字符):
的字符(请参阅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());
}
}
}