正则表达式替换字符串的开始和结束

时间:2012-11-28 06:32:38

标签: c# .net regex

考虑以下输入: BEGINsomeotherstuffEND

我正在尝试编写正则表达式来替换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$

但是它会捕获整个字符串,因此整个字符串将被替换。

这与我的正则表达知识有关。

帮助!

3 个答案:

答案 0 :(得分:5)

我认为你真的不需要正则表达式。试试像:

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);

当然,请务必将索引替换为要移除的实际长度。

答案 1 :(得分:5)

如何使用它:

^BEGIN(.*)END$

然后将整个字符串替换为介于两者之间的部分:

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

答案 2 :(得分:1)

您不能将正则表达式用作解析引擎。但是,你可以将它翻转过来,然后说你想要的是:

begin(.*)end

然后,抓住第1组中的内容