【问题标题】:Regular Expression: Why do I get no match found正则表达式:为什么找不到匹配项
【发布时间】:2021-01-24 16:46:50
【问题描述】:

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

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

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

【问题讨论】:

  • 当你说:[]: _(下划线是一个空格)后面应该跟any字符直到第一个:,你就是在否定自己。显然,由于: 也是一个字符,所以 any 字符是行不通的。
  • 没错,':' 也被认为是任何字符,但我尝试了这么多变体,不知道如何从任何字符中排除 ':'。

标签: java


【解决方案1】:

这就是你想要的?

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

或者

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

更新:

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

【讨论】:

  • Java 正则表达式需要额外的转义
  • 是的,我找到了一个将正则表达式转换为 Java 正则表达式的站点:regexplanet.com/advanced/java/index.html
  • 谢谢,第二个模式是我想要的。第一个在教唆后去掉“:”
【解决方案2】:

所以你想匹配一个字符串:

  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());
        }
    }
}

【讨论】:

  • 谢谢,这就是我想要的。当我昨天尝试这个时,我使用的是 [^:].*:" 而不是 [^:]*:",并且不知道 '*' 可以在没有 '.' 的情况下单独使用
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多