如何在Java中匹配多个正则表达式模式的字符串

时间:2016-08-30 18:21:14

标签: java regex

我理解如何使用管道符号将单个字符串与多个正则表达式匹配,如本问题的一些答案中所述:Match a string against multiple regex patterns

我的问题是,当我有以下字符串时:

this_isAnExample of What nav-input a-autoid-9-announce thisIsAnExampleToo

我使用以下正则表达式来提取文本:

[A-Z][a-z]*|(?<=_)[A-Za-z-]*

我期待得到以下比赛:

is
An
Example
What
Is
An
Example
Too

但实际上我得到的是:

isAnExample
What
Is
An
Example
Too

基本上引擎会自动将单词An与示例相关联,因为它与下划线模式匹配,但我希望它将它们视为两个单词(非贪婪?),根据另一个模式,还有另一个匹配。

2 个答案:

答案 0 :(得分:2)

您可能会将正则表达式设为

h1

第一部分是以大写字母开头的小写字,或第二部分:以下划线开头的小写字。

您发布的正则表达式[A-Z][a-z]*|(?<=_)[a-z-]* 的部分匹配下划线后面的大小写字母,即大写字母符合时不会停止匹配,这实际上应该是另一个单词的开头。

答案 1 :(得分:0)

您可以使用此替换正则表达式捕获所有小写文本,其前面有_或混合大小写文本:

((?<=_)[a-z][a-z-]*|[A-Z][a-z]*)

RegEx Demo