这是我第一次使用正则表达式。
以下字符串
var value ="abc ltd as yes"
需要改为
var value ="abc Limited"
我有以下代码:
public static string Attempt_Prefix_Removal( string prefix, string replacement, bool remove = false)
{
if (remove == true)
{
var yesy = $"(?<!prefix )" + prefix + ".*";
var test = Regex.Replace(prefix.ToLower(), $"(?<!prefix )" + prefix + ".*", replacement );
}
var output = (remove == true) ? Regex.Replace(prefix.ToLower(), $"(?<!prefix )" + prefix + ".*", replacement) : Regex.Replace(prefix.ToLower(), $"(?<!prefix )" + prefix + "", replacement);
return output;
}
传递给方法的值是
prefix ="ltd", replacement = "Limited" , remove = ture
运行代码后,结果为
abc Limited as yes
我需要改变什么才能获得as yes
?
谢谢
答案 0 :(得分:1)
private string regexOp(string sentence, string word, string wordtoReplace, bool isRemove)
{
var retValue = sentence;
if (isRemove)
{
var Pattern = "^.*?(?=" + word + ")";
Match result = Regex.Match(sentence, @Pattern);
if (!string.IsNullOrEmpty(result.Value))
retValue = result + wordtoReplace;
}
else
retValue = Regex.Replace(sentence, word, wordtoReplace);
return retValue;
}
尝试这种方法,这将按照您的预期动态, 如果这真的对你有帮助,不要忘记将其标记为答案,
答案 1 :(得分:1)
您可以利用此代码:
var prefix ="ltd"; var replacement = "Limited";
var pat = $@"(?s)(?<!\w){Regex.Escape(prefix)}(?!\w){remove ? ".*" : string.Empty}";
return Regex.Replace(val, pat, replacement.Replace("$", "$$"));
这里的要点是:
(?s)
- 允许.
匹配换行符(如果您在模式中使用.*
)(?<!\w){Regex.Escape(prefix)}(?!\w)
- 如果当前位置前面带有字词char,则(?<!\w)
否定后瞻将使匹配失败(您可以根据您的要求进一步调整后瞻模式){remove ? ".*" : string.Empty}
- 这会追加.*
(如果remove
是 true )或不追加。