我要拆分的字符串如下所示。
String text = " *Some text* *Another text* *Yet another text* **last text**";
我需要拆分上面的字符串,以便我可以获得如下所示的数组。
String[] array = {"Some text", "Another text", "Yet another text", "last text"}
如果你注意到,前三个文本周围有单个星号(*),而最后一个文本周围有双星号。
此外,文本之间可以有空格。 *Some text*
。
文字与*
之间不会有任何空格 e.g。 *Text* - will happen
* some text * - will not happen
任何人都可以提供帮助,因为我不太了解正则表达式。
答案 0 :(得分:1)
以下是从您的问题和评论中推断出的规范:
*
后面应加上字母char(字母/数字/下划线)*
前面应加上字词char 您可以使用仅仅"\\B\\*\\b([^*]+)\\b\\*\\B"
模式来断言星号的预期位置(\\B\\*\\b
- 在非字符字符串或字符串开头之后和单词字符之前的星号,以及{{1} - 非字符字符串/字符串结尾之前和字符字符之后的星号),并将除\\b\\*\\B
以外的1个或多个字符抓取到组1中。
*
更复杂的变体,仅检查星号是否跟随/先前是否为空(String s = " *Some text* *Another text* *Yet another text* **last text**";
Pattern pattern = Pattern.compile("\\B\\*\\b([^*]+)\\b\\*\\B");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
}
+ start|space
+ *
+ non-space
+ {{1} } + any_chars_not_parens
+ non-space
)可以是
*