这是我正在使用的当前代码
public string obfuscateNums(string src)
{
string returnSrc = src;
string[] numbers = Regex.Split(src, @"\D+");
foreach (string val in numbers)
{
if (!string.IsNullOrEmpty(val))
{
string newNum = obfuscateNumber(val);
Regex reg = new Regex(val);
returnSrc = reg.Replace(returnSrc, newNum);
}
}
return returnSrc;
}
public string obfuscateNumber(string origNumber)
{
Random random = new Random();
int orig = Convert.ToInt32(origNumber);
int add = random.Next(0, orig * 2);
int sub = add;
int mul = random.Next(0, orig * 2);
int div = mul;
return "((((" + orig + " + " + add + ")-" + sub + ")*" + mul + ")/" + div + ")";
}
之前它只会混淆最后一个号码,但现在它已经混淆了已经混淆的号码内的数字。有谁知道我会如何解决这个问题?
当前结果:
local x = ((((27 + ((((5 + 9)-9)*0)/0)1)-((((5 + 9)-9)*0)/0)1)*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((29 + ((((5 + 9)-9)*0)/0)((((4 + 7)-7)*0)/0))-((((5 + 9)-9)*0)/0)((((4 + 7)-7)*0)/0))*((((4 + 7)-7)*0)/0))/((((4 + 7)-7)*0)/0)) + ((((28 + ((((5 + 9)-9)*0)/0)((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))-((((5 + 9)-9)*0)/0)((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((26 + ((((4 + 7)-7)*0)/0)9)-((((4 + 7)-7)*0)/0)9)*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0) + ((((4 + 7)-7)*0)/0) + ((((5 + 9)-9)*0)/0)
答案 0 :(得分:1)
您可以使用Regex.Replace(...)
的重载来获取MatchEvaluator
:
https://msdn.microsoft.com/en-us/library/cft8645c(v=vs.110).aspx
像这样:
public string obfuscateNums(string src)
{
string returnSrc = src;
var reg = new Regex(@"\d+");
return reg.Replace(src, (match) => obfuscateNumber(match.Value));
}
public string obfuscateNumber(string origNumber)
{
Random random = new Random();
int orig = Convert.ToInt32(origNumber);
int add = random.Next(0, orig * 2);
int sub = add;
int mul = random.Next(0, orig * 2);
int div = mul;
return "((((" + orig + " + " + add + ")-" + sub + ")*" + mul + ")/" + div + ")";
}
MatchEvaluator
方法参数是一种处理每个匹配并返回替换值的方法。
答案 1 :(得分:0)
将var returnSrc = src;
var numbers = Regex.Split(src, @"\D+");
var lastIndex = 0;
foreach (var val in numbers)
if (!string.IsNullOrEmpty(val))
{
var newNum = ObfuscateNumber(val);
var startIndex = returnSrc.IndexOf(val, lastIndex);
if (startIndex == -1) continue;
returnSrc = returnSrc.Remove(startIndex, val.Length);
returnSrc = returnSrc.Insert(startIndex, newNum);
lastIndex = startIndex + newNum.Length;
}
return returnSrc;
更改为:
ArrearsL1M<-function(input1, input2, input3, input4){
output=0
output=ifelse((df[[input1]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input2]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input3]] %in% c(1,2,3,4,5)),1,
ifelse((df[[input4]] %in% c(1,2,3,4,5)), 1, 0))))
return(output)