我试图在字符串
中的引号内找到所有equals的出现如果我的输入字符串是:
anything='', bob2='age=24, sex=M', dilan=24, noble1='yellow'
我希望找到我的角色如下
anything='', bob2='age=24, sex=M', dilan=24, nobel1=24
^ ^
然后将其替换为
anything='', bob2='age~24, sex~M', dilan=24, nobel1=24
^ ^
我尝试了以下内容来查找所有出现的内容
'[^',].+?'
但那没用。
答案 0 :(得分:0)
您可以使用这些组使用正则表达式执行此操作。
试试这段代码:
(?<=age)(\=)(\S+\s\w+)(\=)
然后,用~
替换第1组和第3组,并保持第2组完整:~$2~
演示:https://regex101.com/r/qxR9ty/1
<强>更新强>
您可以首先使用@Maverick_Mrt建议的否定反馈,然后通过添加|
来取消您要排除的任何类别,例如cat1|cat2
(?<!app|policy_name|dvc_host|sender|sal)\=
答案 1 :(得分:0)
仅通过正则表达式实现您的要求非常困难。
我想通过char迭代String char来实现它。
请检查以下代码。我把评论放在里面。我正在使用Java,但您可以在其中使用该算法。
public class Main {
public static void main(String args[]){
String input = "param1='', param2='age<b>=</b>24, sex<b>=</b>M', param3=24, param4='yellow'";
char[] arr = input.toCharArray();
boolean close = true;
/**
* Iterate the char array
*/
for(int i = 0;i < arr.length;i++){
if(arr[i] == '\''){
/**
* Ignore the escaped ' char in ''
*/
if(i > 0 && arr[i - 1] == '\\'){
break;
}
/**
* Use close to check whether equal sign is inside the ''
*/
if(close){
close = false;
}else{
close = true;
}
}else if(arr[i] == '='){
if(!close){
arr[i] = '~';
}
}
System.out.print(arr[i]);
}
}
}
答案 2 :(得分:0)
试试这个:
(?<!param[\d+])=
并替换为:
〜
击穿: 它将寻找任何'='并将看到它是否先于param [\ d +]。 如果没有param \ d +之后,它将捕获=符号。
那个=将被〜
取代