正则表达式:为什么找不到匹配项

时间:2020-10-09 15:18:53

标签: java

我正在尝试分析包含许多部分的文档。

每个部分均以:[]:开头,后跟空格,然后是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}"

提取我想要的内容的正则表达式将如何显示?

2 个答案:

答案 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)

所以您要匹配以下字符串:

  1. :[]:_(其中_是空格字符)
  2. 后面跟着一个或多个不是:的字符(请参阅this问题)
  3. 使用:字符结束比赛

该正则表达式为:

:\[\]: [^:]+:

将正则表达式模式转换为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());
        }
    }
}