Строковое выражение не соответствует ширине строки с помощью регулярного выражения Java - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь найти следующую строку:

÷7%3@x#2$+÷5%3@x#2$-4

со следующим соответствием:

string = string.replaceAll("÷(.+)%(.+)@x#([0-9]+)\\$","÷$1x#$3\\$%$2@");

из приведенного выше вызова, я вижу, что: $1 = (.+) and $2 = (.+) and $3 = ([0-9]+)

после вызова replaceAll: строка изменилась на: ÷7%3@x#4$+÷5x#2$%3@-4

Обратите внимание , что регулярное выражение применено только к ÷5%3@x#2$, а не к ÷7%3@x#2$

Мне нужно регулярное выражение, чтобы соответствовать широкому выражению.

Что может быть не так с регулярным выражением?

1 Ответ

0 голосов
/ 06 января 2019

Я публикую этот ответ, который является действительным решением для того, что я пытаюсь достичь. Это не самое элегантное решение проблемы, но оно работает.

В своем ответе я использую классы Pattern и Matcher, чтобы охватить каждое вхождение моего регулярного выражения, а затем заменяю их, когда Pattern и Matcher находят каждый из них.

Pattern pattern = Pattern.compile("÷.+?%.+?@x#\\d+\\$");
Matcher matchk = patternk.matcher(string);
while(matchk.find()){
String string1 = matchk.group();
String string2 = string1;
string2 = string2.replaceAll("÷(.+)%(.+)@x#(\\d+)\\$","÷$1x#$3\\$%$2@");
string = string.replace(string1,string2);}

Результатом является отформатированная строка, которую я искал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...