C# 替换字符串开头和结尾的正则表达式

C# 替换字符串开头和结尾的正则表达式,c#,.net,regex,C#,.net,Regex,考虑以下输入: 从另一端开始 我试图编写一个正则表达式来替换BEGIN和END,但前提是它们都存在 我得到的结果是: (^BEGIN|END$) 使用以下c#代码执行字符串替换: private const string Pattern = "(^guid'|'$)"; private static readonly Regex myRegex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.CultureInvariant

考虑以下输入: 从另一端开始

我试图编写一个正则表达式来替换BEGIN和END,但前提是它们都存在

我得到的结果是:

(^BEGIN|END$)
使用以下c#代码执行字符串替换:

private const string Pattern = "(^guid'|'$)";
private static readonly Regex myRegex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | RegexOptions.Singleline | RegexOptions.IgnoreCase);
var newValue = myRegex.Replace(input, string.empty);
但不幸的是,这两者都匹配——不仅仅是当它们都存在的时候

我还尝试:

^BEGIN.+END$
但这会捕获整个字符串,因此整个字符串将被替换

这就是我对正则表达式的了解


救命啊

不能将正则表达式用作解析引擎。但是,您可以将其翻转过来,然后说您想要介于以下两者之间的内容:

begin(.*)end

然后,只需抓取第1组中的内容,我认为您在这里并不真正需要正则表达式。试一下这样的方法:

if (str.StartsWith("BEGIN") && str.EndsWith("END"))
    str = "myreplaceBegin" + str.Substring(5, str.Length - 8) + "myreplaceEnd";
从您的代码来看,您似乎只想删除开头和结尾部分(而不是用任何东西替换它们),因此您可以只执行以下操作:

if (str.StartsWith("BEGIN") && str.EndsWith("END"))
    str = str.Substring(5, str.Length - 8);
当然,一定要用要删除的内容的实际长度替换索引。

使用以下方法如何:

^BEGIN(.*)END$
然后将整个字符串替换为介于两者之间的部分:

var match = myRegex.Match(input);
var newValue = match.Success ? match.Groups(1).Value : input;