我试图创建一个正则表达式模式(一个或多个)。例如,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进行匹配。
我可以向您寻求帮助或提示吗?
答案 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