根据不同的前后缀条件可以利用正则截取中间内容吗

例如 string str=“a张三bc李四de五f”;
截取成 张三 李四 王五

正则表达式


(a1|a2|a3)(.*?)(b1|b2|b3)(c1|c2|c3)(.*?)(d1|d2|d3)(e1|e2|e3)(.*?)(f1|f2|f3)

说明:a,a2,a3表示张三的多种前缀字符串,b1,b2,b3表示张三的多种后缀字符串。如果还有更多的,加到括号里,中间用 | 分隔。
用 $数字 的形式截取匹配的项。数字按照括号出现的顺序计算。

string str="a1张三b1c2李四d2e1王五f2";
System.out.println(str.replaceAll("(a1|a2|a3)(.*?)(b1|b2|b3)(c1|c2|c3)(.*?)(d1|d2|d3)(e1|e2|e3)(.*?)(f1|f2|f3)","$2 $5 $8"));

如果bc之间、de之间还有其他字符,可以把正则表达式改成这样:

(a1|a2|a3)(.*?)(b1|b2|b3).*(c1|c2|c3)(.*?)(d1|d2|d3).*(e1|e2|e3)(.*?)(f1|f2|f3)

正则表达式:

[a-zA-Z\d]*(.*?)[a-zA-Z\d]*(.*?)[a-zA-Z\d]*(.*?)[a-zA-Z\d]*

举例:

string str="a张三bc李四de五f";
System.out.println(str.replaceAll("[a-zA-Z\d]*(.*?)[a-zA-Z\d]*(.*?)[a-zA-Z\d]*(.*?)[a-zA-Z\d]*","$1 $2 $3"));

正则表达式

a(.*?)bc(.*?)de(.*?)f

用$1 $2 $3分别得到张三 李四 王五

string str="a张三bc李四de五f";
System.out.println(str.replaceAll("a(.*?)bc(.*?)de(.*?)f","$1 $2 $3"));

这个可以实现吗