2013-07-07 108 views
2

我试图分裂,如:Twitter Hashtag Is Very COMPLICATED正则表达式用大写分割字符串和lowercharacter

我可以用正则表达式来做到这一点:TwitterHashtagIsVeryCOMPLICATED

的字符串被splited等之后?

非常感谢您的建议。

+2

你可以尝试什么? –

+0

可能重复[正则表达式分割camelCase或TitleCase(高级)](http://stackoverflow.com/q/7593969/1578604)。 – Jerry

回答

5

这应该工作:

str.split("(?<=[a-z])(?=[A-Z])") 

的想法是使用零长度的回顾后小写字母和大写字母长度为零的前瞻。这种构造只会在骆驼情况下的字符串中匹配。

这是demo on ideone

+0

完美的ASCII解决方案;)我不知道推特这么多,你可以使用除了ASCII字母在推特“ID”以外的其他东西? – fge

+0

@dasblinkenlight非常感谢。它的工作原理和演示非常直观。 –

1

编辑通过dasblinkenlight的回答(+1为)强烈启发。 我只更改为Unicode类别这里对Unicode的支持:

String test = "TwitterHashtagIsVeryCOMPLICATED"; 
for (String splitted: test.split("(?<=\\p{Ll})(?=\\p{Lu})")) { 
    System.out.println(splitted); 
} 

输出:

Twitter 
Hashtag 
Is 
Very 
COMPLICATED 
+0

谢谢@Mena,它的作品 –

+1

@HoaVu欢迎您。正如fge提到的,我不确定是否Unicode字符在散列标签中完全受支持。如果是,则可以考虑使用Unicode类别,而不是小写/大写ASCII字符类。 – Mena

+0

谢谢。你能告诉我任何可以学习正则表达式的文档和测试它的工具,所以我可以自己掌握正则表达式,而不是在这里张贴这么多:)。 –