Regex IsMatch以字符串的特定索引为中心

本文关键字:索引 为中心 IsMatch 字符串 Regex | 更新日期: 2023-09-27 18:17:14

我有一个问题在这部分代码的速度:

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(从0到i)?例如,像这样:

reg.IsMatch(text,0,i);

所以问题是,我如何regex字符串的特定部分(从i位置到j位置)?

Regex IsMatch以字符串的特定索引为中心

如果您查看IsMatch方法重载,您会发现您只需要一个具有类似行为的方法:

IsMatch(String, Int32)
指示在Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的起始位置开始。

但是这个方法只解决了问题的一部分,所以你必须使用Match重载:

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;