复杂模式匹配

时间:2019-05-21 13:47:18

标签: java regex regex-lookarounds regex-group regex-greedy

我一直在解决这个问题,包括尝试在正则表达式之外进行尝试,我需要两个与此匹配的正则表达式

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

更准确地匹配“名称”和“名称1,名称2”,即名称,名称1和名称2的单词和空格的任意组合。

这就是我所拥有的

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

2 个答案:

答案 0 :(得分:1)

在这里,我们也许可以使用捕获组编写一个表达式来涵盖两种情况。可能与此类似:

([})])?([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电路

jex.im还有助于可视化表达式。

enter image description here

答案 1 :(得分:0)

找到了一种通过使用两个正则表达式来实现此目的的方法,一个正则表达式也与整个事物完全匹配,因此首先要使用此'\ w + \ s \ S +?\ s + \“([^^”] *)\“ '