正则表达式捕获句子中常量之前的单词
Regex to capture a word before a constant in a sentence
我有多个语句以常量结尾,并且在该常量前面有一个变量(文件名)。
示例:
- NYC.GENX 应用程序的转换例程。 - 应该显示 'NYC.GENX'
- CAP-GENY 应用程序的转换例程。 - 应该显示 'CAP-GENY'
- NNUAT_CHECK 应用程序的转换例程。 - 应该显示 'NNUAT_CHECK'
- 创建于 2014 年 1 月 1 日 11:40 上午 RUN_SCRIPT 申请。 - 应该显示 'NNUAT_CHECK'
- 事件创建于 2014 年 2 月 2 日 12:29 下午 STOP_SERVER 应用程序。 - 应该显示 'STOP_SERVER'
正如你在上面看到的,每个句子都以一个常数'application.'结尾。我想在每个语句中捕获该常量之前的单词。
有没有简单的正则表达式可以做到这一点?我想避免 java 中涉及字符串的多行代码来执行此操作。
我已经试过了,但它会获取语句中的所有单个单词,而我只想要常量前的一个单词。
\w+(?=.*:)
您可能想试试 "\b([A-Z_\-\.]+)\s+application"
\b
- 单词边界
A-Z_\-\.
- 匹配的单词只能包含从 A 到 Z 的字母、下划线、破折号和点
s+
- 一个或多个空白字符
如您所见,匹配的词包含在括号内的捕获组中。
您预期的匹配项似乎由非空白字符组成,因此,您可以使用
\S+(?=\s+application)
这里,
\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)
我有多个语句以常量结尾,并且在该常量前面有一个变量(文件名)。
示例:
- NYC.GENX 应用程序的转换例程。 - 应该显示 'NYC.GENX'
- CAP-GENY 应用程序的转换例程。 - 应该显示 'CAP-GENY'
- NNUAT_CHECK 应用程序的转换例程。 - 应该显示 'NNUAT_CHECK'
- 创建于 2014 年 1 月 1 日 11:40 上午 RUN_SCRIPT 申请。 - 应该显示 'NNUAT_CHECK'
- 事件创建于 2014 年 2 月 2 日 12:29 下午 STOP_SERVER 应用程序。 - 应该显示 'STOP_SERVER'
正如你在上面看到的,每个句子都以一个常数'application.'结尾。我想在每个语句中捕获该常量之前的单词。
有没有简单的正则表达式可以做到这一点?我想避免 java 中涉及字符串的多行代码来执行此操作。
我已经试过了,但它会获取语句中的所有单个单词,而我只想要常量前的一个单词。
\w+(?=.*:)
您可能想试试 "\b([A-Z_\-\.]+)\s+application"
\b
- 单词边界
A-Z_\-\.
- 匹配的单词只能包含从 A 到 Z 的字母、下划线、破折号和点
s+
- 一个或多个空白字符
如您所见,匹配的词包含在括号内的捕获组中。
您预期的匹配项似乎由非空白字符组成,因此,您可以使用
\S+(?=\s+application)
这里,
\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)