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

问题描述 投票:0回答:2

我正在尝试解析由许多部分组成的文档。

每个部分均以

:[]:
开头,后跟空格,然后是 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}"

提取我想要的内容的正则表达式会是什么样子?

java regex
2个回答
3
投票

这就是你想要的吗?

(?<=:[]: ).*?(?=:)

查看更多:https://regex101.com/r/jOmnSb/2

或者

:[]:.*?:

查看更多:https://regex101.com/r/jOmnSb/3

更新:

您可以在此处将正则表达式转换为 Java 正则表达式:https://www.regexplanet.com/advanced/java/index.html


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());
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.