2

考虑以下输入: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$

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

就我的正则表达式知识而言,这差不多。

帮助!

4

3 回答 3

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

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

于 2012-11-28T06:37:04.917 回答
5

如何使用这个:

^BEGIN(.*)END$

然后用中间的部分替换整个字符串:

var match = myRegex.Match(input);
var newValue = match.Success ? match.Groups(1).Value : input;
于 2012-11-28T06:38:19.043 回答
1

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

begin(.*)end

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

于 2012-11-28T06:36:54.203 回答