У меня есть произвольная строка, например,
String multiline=`
This is my "test" case
with lines
\section{new section}
Another incorrect test"
\section{next section}
With some more "text"
\subsection{next section}
With some more "text1"
`
Я использую LaTeX и хочу заменить цитаты на те, которые используются в книгах - аналогично ,, и ´´ Для этого мне нужно заменить начинающиеся кавычки с \glqq
и окончание с \qrqq
- для каждой группы, которая начинается с \.?section
.
Если я попробую следующее
String pattern1 = "(^\\\\.?section\\{.+\\})[\\s\\S]*(\\\"(.+)\\\")";
Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);
Matcher m = p.matcher(testString);
System.out.println(p.matcher(testString).find()); //true
while (m.find()) {
for (int i = 0; i < 4; i++) {
System.out.println("Index: " + i);
System.out.println(m.group(i).replaceAll("\"([\\w]+)\"", "\u00AB$1\u00BB"));
}
}
, я получу как результат на консоли
true
Index: 0
\section{new section}
Another incorrect test"
\section{next section}
With some more «text1»
Index: 1
\section{new section}
Index: 2
«text1»
Index: 3
text1
Мои проблемы с текущим подходом:
- Первое правильное совпадение (
"text"
) не найдено. Я предполагаю, что это связано с многопоточностью и неправильной группировкой \section{
. Группировка для кавычек должна быть ограничена группой, которая начинается с \section
и заканчивается \?.section
- как это исправить? - Даже когда текст найден правильно - как получить полную строку с заменами?