我有多个以常量结尾的语句,并且在该常量前面有一个变量(文件名)。
示例:
正如您在上面所看到的,每个句子都以一个持续的'应用程序结束。' 。我希望在每个语句中捕获该常量之前的单词。
是否有一个简单的正则表达式可以做到这一点?我想避免在涉及字符串的java中使用多行代码来执行此操作。
我试过这个,但它只是在一个语句中取出所有单词,而我只想要一个常量之前的一个单词。
aws s3 ls s3://bucket/key..
答案 0 :(得分:1)
您的预期匹配似乎由非空白字符组成,因此,您可以使用
\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。
答案 1 :(得分:0)
您可以尝试"\\b([A-Z_\\-\\.]+)\\s+application"
\\b
- 字边界
A-Z_\\-\\.
- 匹配的字只能包含A到Z,下划线,短划线和点的字母
s+
- 一个或多个空白字符
如您所见,匹配的单词包含在括号内的捕获组中。
答案 2 :(得分:0)
(\ S +)捕获组中的所有非空格,后跟\ s +空格字符和单词application。
\b(\S+)\s+application
这会将所需的文本放入捕获组。
或与Wiktor的结合。
\b(\S+)(?=\s+application)