考虑以下输入: 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$
但是它会捕获整个字符串,因此整个字符串将被替换。
这与我的正则表达知识有关。
帮助!
答案 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组中的内容