目录

参考资料:

  1. java正则表达式实现

简单批量替换

举例:将and 批量替换为&&

python实现

import re
def transformsimple(fromregex, totext, intext):
    return re.sub(fromregex, totext,intext, flags =re.i)
if __name__ == "__main__":
    intext = "x =1 and y =2"
    fromregex = " and "
    totext = " && "
    outtext = transformsimple(fromregex,totext,intext )
    print(outtext)
	## output: x =1 && y =2

java实现

import java.util.*;
import java.util.regex.*;
public class regextest {
	private static string transformsimple(string regexpattern, string repltext, string intext){
        return pattern.compile(regexpattern, pattern.case_insensitive).matcher(intext).replaceall(repltext);
    }
    public static void main(string[] args) {
	    string input = "x =1 and y =2";
        string patternstring =" and ";
        string totext = " && ";
        string outtext ="";
        outtext = transformsimple(patternstring, totext, input);
        system.out.println("result: " + outtext);
}

// result: x =1 && y =2

复杂模板替换

举例:将x in (1,2)批量替换为[1,2].contains(x)

分析: 模板化

  • 输入分组捕获 (\s+)\s+in\s*\((.+?)\)
  • 输出分组填写 [@2].contains(@1) – @1和@2分别对应分组捕获中的第1组和2组。

python实现

import re
def transformcomplex(fromregex, totext, intext):
    regobj = re.compile(fromregex, flags =re.i)
    for match in regobj.finditer(intext):
        index = 1
        outtext = totext
        for group in match.groups():
            outtext = outtext.replace("@"+str(index), group)
            index +=1
        intext = intext.replace(match.group(0), outtext)
    return intext
if __name__ == "__main__":
    fromregex = "(\s+)\s+in\s*\((.+?)\)"
    totext = "[@2].contains(@1)"
    intext = "x in (1,2) and y in (3,4)"
    outtext22 = transformcomplex(fromregex, totext, intext)
    print(outtext22)
    ## output: [1,2].contains(x) and [3,4].contains(y)

java实现

import java.util.*;
import java.util.regex.*;
public class regextest {
	private static string transformcomplex(string regexpattern, string repltext, string intext){
        pattern pattern = pattern.compile(regexpattern, pattern.case_insensitive);
        matcher matcher = pattern.matcher(intext);
        string outtext ="";
        while (matcher.find()){
            outtext =  repltext;
            for (int i =1; i <= matcher.groupcount(); i++){
                outtext = outtext.replace("@"+i, matcher.group(i));
            }
            intext = intext.replace(matcher.group(0), outtext);
        }
        return intext;
    }
    public static void main(string[] args) {
        string input = "x in (1,2) and y in (3,4)";
        string patternstring ="(\\s+)\\s+in\\s*\\((.+?)\\)";
        string totext = "[@2].contains(@1)";
        string outtext ="";
        outtext = transformcomplex(patternstring, totext, input);
        system.out.println("result: " + outtext);
    }
}
// result: [1,2].contains(x) and [3,4].contains(y)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!