我对这段代码的速度有问题:
string sl = text.Substring(0, i);
string sr = text.Substring(i);
var l = left.IsMatch(sl);//with $ at end of regex
var r = right.IsMatch(sr);//with ^ at begin of regex
bool answer = l && r;
这只是检查字符串特定位置的上下文的函数。在这里调用Substring
是一项非常昂贵的操作,所以我决定寻找其他方法来做这件事。
reg.IsMatch(text,i);
此方法仅适用于此文本的sr
子字符串(从i
到字符串末尾)。
有IsMatch
sl
我的Substring
无需拨打i
(从0到reg.IsMatch(text,0,i);
)吗?例如,像这样:
i
所以问题是,我如何正则表达字符串的特定部分(从j
位置到{{1}}位置)?
答案 0 :(得分:1)
如果您查看IsMatch
method overloads,那么您只需要一种具有类似行为的方法:
IsMatch(String, Int32)
指示Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的起始位置开始。
但是这种方法只解决了部分问题,因此您必须使用Match
overloads:
Match(String, Int32, Int32)
从输入字符串中搜索第一次出现的正则表达式,从指定的起始位置开始,仅搜索指定数量的字符。
您应该注意此方法返回Match
对象,因此您必须检查它。
所以你的代码将是这样的(你应该检查索引):
var l = left.Match(text, 0, i);//with $ at end of regex
var r = right.Match(text, i + 1, text.Length - 1 - i);//with ^ at begin of regex
bool answer = l.Success && r.Success;