我想要匹配前面内容中的键和一些数组值,以便将它们转换为翻译记忆库中的标记.基本上,任何匹配的键和值都会被过滤掉,并显示为不可翻译的标签.

该系统支持Java regexp.

以下是最重要的问题:

The array values do not have a hyphen anymore due to some preprocessing.

---
title: This is a title
label:
one
two
three
ultra
description: "this is a description text"
other_key: value
---

note: this is a note outside the front matter
tip: this is a tip ...
one: this is a one

The problem:

  • 在前面的问题之外,可以有相同的文本.目前,有注解、提示和一条(见上文).
  • 标签或值将来可能会更改,每次更改正则表达式并不理想.我已经添加了Ultra和Other_Key作为上面的示例.

Important note:文件规定:"我们将拒绝在包含其他量词(除所有格以外)的组上使用带量词的复杂正则表达式(所有格除外)."

根据这意味着什么,我们可能需要采取非常幼稚的方法:/

到目前为止我的正则表达式:

  • 测试1:^one|^two|^three|^((\w|-)*)(:)
  • 测试2:^one|^two|^three|^description:|^title:|^label:
  • 测试3:^(---(?:\n.*)*)\s*(---)$

推荐答案

将我的 comments 转换为答案,以便将来的访问者很容易找到解决方案.

您可以将此正则表达式与Look Around和\G一起使用,以匹配---之前的所有关键点和标签:

(?:(?:^label:|(?<!\A)\G)\R(\S+)|^\w+(?=:))(?=(?:.*\R)+---)

RegEx Demo

Breakup:

  • ^\w+(?=:):匹配与后面必须跟:的1+字字符匹配的标记
  • \G断言上一场比赛结束时的位置
  • (?:(?:^label:|(?<!\A)\G)\R(\S+):匹配所有标签
  • 向前看,断言我们在当前位置前面有---

Java相关问答推荐

如何从片段请求数据到活动?在主要活动中单击按钮请求数据?

当切换javaFX场景时,stage的大小正在Minimize

在Java中将Charsequence数组更改为String数组或List String<>

Jooq外键关系

我找不到&Quot;配置&的位置

为什么不应用类型推断?

如何从错误通道回复网关,使其不会挂起

通过移动一个类解决了潜在的StubbingProblem.它怎麽工作?

如何从Keyloak映射Hibernate实体中的用户

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

如何在@CsvSource中传递空格作为值

一对多关系和ID生成

FETCH类型设置为LAZY,但它仍会发送第二个请求

在Java泛型中使用通配符时,如何推断类型

如何通过Java java.lang.Foreign API访问本机字节数组

在Oracle中调用输出参数在索引处缺少IN或OUT参数的函数

H2数据库仅支持%1个结果集?

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

对于 Hangman 游戏,索引 0 超出长度 0 的范围

找不到 jar 文件系统提供程序try 使用 jdeps 和 jlink 创建收缩 Java 映像来运行 Minecraft