正则表达式捕获句子中常量之前的单词

Regex to capture a word before a constant in a sentence

我有多个语句以常量结尾,并且在该常量前面有一个变量(文件名)。

示例:

正如你在上面看到的,每个句子都以一个常数'application.'结尾。我想在每个语句中捕获该常量之前的单词。

有没有简单的正则表达式可以做到这一点?我想避免 java 中涉及字符串的多行代码来执行此操作。

我已经试过了,但它会获取语句中的所有单个单词,而我只想要常量前的一个单词。

\w+(?=.*:)

您可能想试试 "\b([A-Z_\-\.]+)\s+application"

\b - 单词边界

A-Z_\-\. - 匹配的单词只能包含从 A 到 Z 的字母、下划线、破折号和点

s+ - 一个或多个空白字符

如您所见,匹配的词包含在括号内的捕获组中。

您预期的匹配项似乎由非空白字符组成,因此,您可以使用

\S+(?=\s+application)

regex demo

这里,

  • \S+ - 匹配除空格以外的 1 个或多个字符...
  • (?=\s+application) - 如果紧跟 1+ 个空白字符 (\s+) 和一个 application 子字符串。

另一种解决方案可能是匹配 1+ 个大写字母后跟任何标点符号,然后再匹配 1+ 个大写字母(也就是说,如果要求看起来像这样)。然后使用

[A-Z]+(?:\p{Punct}[A-Z]+)*(?=\s+application)

参见 another (PCRE variation with [[:punct:]], in Java it is \p{Punct}) demo

(\S+) 捕获一组中的所有非 space,后跟 \s+ 白色 space 字符和单词应用程序。

\b(\S+)\s+application

这会将所需的文本放入捕获组中。

或结合 Wiktor 的。

\b(\S+)(?=\s+application)

demo