Сложный образец соответствия - PullRequest
1 голос
/ 21 мая 2019

Я обдумывал это, в том числе пробовал что-то вне регулярного выражения, мне нужно два, чтобы регулярное выражение соответствовало этому

'Name in "{Name1, Name2}"' and  'Name in "(Name1, Name2)"'

Точнее, что соответствует и «Name», и «Name1, Name2», будучи Имя, Имя1 и Имя2 любая комбинация слов и пробелов.

Это то, что у меня было

'(\\b)(\\s)in(\\s)\\\"{.+?}\\\"'

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Здесь мы могли бы написать выражение для обоих случаев с использованием групп захвата.Может быть похоже на это:

([})])?([A-Z][a-z]+)?([0-9]+)?(,\s)?([({])? 

enter image description here

Тест

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

final String regex = "([\\})])?([A-Z][a-z]+)?([0-9]+)?(,\\s)?([(\\{])?";
final String string = "{Name1, Name2}\n"
     + "(Name1, Name2)";
final String subst = "\\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);

Демо

const regex = /([})])?([A-Z][a-z]+)?([0-9]+)?(,\s)?([({])?/gm;
const str = `{Name1, Name2}
(Name1, Name2)`;
const subst = `$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .Например, вы можете уменьшить границы и значительно упростить это выражение.

RegEx Circuit

jex.im также помогает визуализировать выражения.

enter image description here

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

Нашел способ сделать это с помощью двух регулярных выражений, одно тоже совпадает с целым, другое, чтобы сначала разделить их, используя это \ w + \ s \ S +? \ S + \ "([^ \"] *) \ " «

...