RegEx для захвата специальных символов - PullRequest
2 голосов
/ 29 мая 2019

Я пытаюсь заменить строку с помощью регулярного выражения, что мне в основном нужно, чтобы преобразовать код, подобный присваиванию:

k*=i

в

k=k+i

В моем примере:

jregex.Pattern p=new jregex.Pattern("([a-z]|[A-Z])([a-z]|[A-Z]|\\d)*[\\+|\\*|\\-|\\/][=]([a-z]|[A-Z])*([a-z]|[A-Z]|\\d)");
Replacer r= new Replacer(p,"1=$1,2=$2,3=$3,4=$4,5=$5,6=$6,7=$7,8=$8");
String result=r.replace("k*=i");

Регулярное выражение, похоже, не извлекает специальные символы.

(в этом примере: +, -, *, /, =)

Итак, что я получаю в результате:

1=k,2=,3=,4=i,5=,6=,7=,8=

(я могу извлечь только K & I)

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Здесь мы можем создать выражение, похожее на:

(.+)[*+-/]=(.+)

, где мы собираем наши k и i, используя эти две группы захвата в начале и конце:

(.+)

Мы можем добавить больше границ, если захотим, такие как начальный и конечный символы:

^(.+)[*+-/]=(.+)$

Тест

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(.+)[*+-/]=(.+)";
final String string = "k*=i\n"
     + "apple*=orange";
final String subst = "$1=$1+$2";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);

DEMO

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 29 мая 2019

Вы можете использовать 3 группы захвата и захвата * + / - в классе символов.

([a-zA-Z])([*+/-])=([a-zA-Z])

Это будет соответствовать:

  • ([a-zA-Z]) Группа захвата 1, соответствуетaz AZ
  • ([*+/-]) Группа захвата 2, совпадение * + / -
  • = Совпадение буквально
  • ([a-zA-Z]) Группа захвата 3, совпадение az AZ

Regex demo | Java демо

И заменить на:

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