正则表达式模式匹配驼峰案例字符串的许多组合

时间:2017-07-26 15:58:55

标签: java regex pattern-matching camelcasing

我试图创建一个正则表达式模式(一个或多个)。例如,SomeCamelStringToCombine应该匹配以下子字符串:

Some, Camel, String, To, Combine, SomeCamel, SomeCamelString,SomeCamelStringTo, SomeCamelStringToCombine, CamelString, CamelStringTo, CamelStringToCombine, StringTo, StringToCombine, ToCombine

我设法创建了这种模式:/(?=([\p{Lu}]+[\p{L}]+))/,但匹配

SomeCamelStringToCombine, CamelStringToCombine, StringToCombine, ToCombine, Combine

我不知道是应该修改它还是创建额外的模式。问题是我不知道怎么做。我使用Java进行匹配。

我可以向您寻求帮助或提示吗?

1 个答案:

答案 0 :(得分:0)

您可以制作一个固定大小的正则表达式来查找最多那么多单词组合 下面使用5个单词的捕获,但你可以将它扩展到任何大小。

您可以通过编程方式轻松创建正则表达式。

只需从数组中排除捕获组。

注意,在第一场比赛之后,您也可以排除1-5组以避免发生 重复单打。

(?=([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)?([A-Z][a-z]+)?([A-Z][a-z]+)?)(?=(\1\2))(?=(\6\3)?)(?=(\7\4)?)(?=(\8\5)?)\1

https://regex101.com/r/ta9Qzq/1

 (?=
      ( [A-Z] [a-z]+ )              # (1), required Word 1
      ( [A-Z] [a-z]+ )              # (2), required Word 2
      ( [A-Z] [a-z]+ )?             # (3), optional Word 3
      ( [A-Z] [a-z]+ )?             # (4), optional Word 4
      ( [A-Z] [a-z]+ )?             # (5), optional Word 5
 )
 (?=
      ( \1 \2 )                     # (6), required Word 1,2
 )
 (?=
      ( \6 \3 )?                    # (7), optional Word 1,2,3
 )
 (?=
      ( \7 \4 )?                    # (8), optional Word 1,2,3,4
 )
 (?=
      ( \8 \5 )?                    # (9), optional Word 1,2,3,4,5
 )
 \1                            # Advance position by 1 word