使用正斜杠(方括号内除外)
本文关键字:方括号 | 更新日期: 2023-09-27 18:33:51
示例文本(我已经突出显示了所需的/
):
对[@Key=2] /
个项目/
项目[人/姓名='马丁'] /
日期
正在尝试获取不在方括号内的每个正斜杠,任何使用正则表达式的人都能在这方面帮助我吗? 用途是:
string[] result = Regex.Split(text, pattern);
我已经用这段代码完成了它,但想知道是否有一个更简单的正则表达式可以做同样的事情:
private string[] Split()
{
List<string> list = new List<string>();
int pos = 0, i = 0;
bool within = false;
Func<string> add = () => Format.Substring(pos, i - pos);
//string a;
for (; i < Format.Length; i++)
{
//a = add();
char c = Format[i];
switch (c)
{
case '/':
if (!within)
{
list.Add(add());
pos = i + 1;
}
break;
case '[':
within = true;
break;
case ']':
within = false;
break;
}
}
list.Add(add());
return list.Where(s => !string.IsNullOrEmpty(s)).ToArray();
}
使用
Regex.Matches
可能是比尝试使用split更好的方法。 您不是指定要拆分的模式,而是尝试匹配所需的输出。 这适用于基本情况:
string[] FancySplit(string input) {
return Regex.Matches(input, @"([^/'[']]|'[[^]]*'])+")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
}
正则表达式的方法是查找以下序列:
- 不
[
、]
或/
字符
或 - 形式
[
某物]
的序列,其中某物被允许包含/
这不适用于一般情况,但它可以正确处理大多数实际情况:
(?<!'[[^]]+)/
此表达式使用负后视来匹配正斜杠,除非它前面有一个方括号,后跟一个右方括号以外的字符序列。