Мне нужно разбить строку, используя пробел, но соберите вместе слова, окруженные указанным c символом. Указанные c символы могут быть `
, *
или **
.
. Позвольте мне привести пример:
The `String class` represents character strings.
All *string literals* in **Java programs**, such as **abc**
Я хочу получить такой результат:
The
`String class`
represents
character
strings.
All
*string literals*
in
**Java programs**
,
such
as
**abc**
Я могу написать регулярное выражение, которое разделяет мою входную строку на части, если у меня только один вид маркерного символа. Но, к сожалению, у меня есть маркеры умножения.
Это регулярное выражение, которое я использую в своем коде: [^\s"]+|"[^"]*("|$)
. Это прекрасно работает только с одним маркером:
String marker = "`";
String data = "The `String class` represents character strings. All *string literals* in **Java programs**, such as **abc**...";
String regexp = "[^\\s" + marker + "]+|" + marker + "[^" + marker + "]*(" + marker +"|$)";
Pattern pattern = Pattern.compile(regexp);
Matcher regexMatcher = pattern.matcher(data);
while (regexMatcher.find()) {
System.out.println(regexMatcher.group());
}
Вывод:
The
`String class`
...
*string
literals*
in
**Java
programs**,
such
as
**abc**...
Я попытался вставить несколько маркеров, но следующее решение не работает:
String marker = "`|\*"
Я могу написать java код для выполнения этой работы, но я подумал, что с помощью regexp может быть проще. Но я не уверен в этом сейчас.