Regex提取两个字符串之间的字符串列表
本文关键字:字符串 之间 列表 两个 提取 Regex | 更新日期: 2023-09-27 18:00:14
我有一个字符串,我想从中提取包含在两个字符串之间的字符串列表:['
和']
。我尝试了在网上找到的几个正则表达式规则(特别是这个问题),但问题是正确地转义字符以使正则表达式正常工作。
如何提取两个字符串之间的字符串列表?我想做这样的事情:
List<string> TheListOfStrings = Regex.Matches(TheText, "....");
源代码是一个JavaScript块,我想从中提取对象键:对于instrance,TheObject['SomeProp'] = TheOtherObject['OtherProp']
,因此列表应该包含SomeProp
和OtherProp
;按键可以在输入文本中多次出现。
您的主要困难在于将方括号识别为分隔文本,而不是正则表达式的一部分。
string input = "a['bc']d['ef']gh']";
MatchCollection matches = Regex.Matches(input, @"'['(?<key>.*?)'']");
var listOfKeys = matches.Cast<Match>().Select(x => x.Groups["key"].Value);
真的很管用。
如果性能很重要,并且它将被多次运行,那么编译正则表达式将获得显著的胜利:
string input = "a['bc']d['ef']gh']";
Regex re = new Regex(@"'['(?<key>.*?)'']", RegexOptions.Compiled);
MatchCollection matches = re.Matches(input);
var listOfKeys = matches.Cast<Match>().Select(x => x.Groups["key"].Value);
使用通用模式
(?<=prefix)find(?=suffix)
它使用lookbehind和lookahead来查找模式,而不将它们包含在结果中。
其中
nbsp前缀 为CCD_ 6;左括号被转义
nbsp查找 nbsp nbsp;为CCD_ 7;任何字符的序列,但尽可能少
nbsp后缀 是']
(?<='[').*?(?='])
List<string> TheListOfStrings = Regex.Matches(input, @"(?<='[').*?(?='])")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
如果重复调用同一个正则表达式,请创建它的可恢复实例,而不是调用静态方法。此外,如果您多次使用它,请考虑使用Compiled
选项。它会跑得更快;然而,代价是初始化时间更长。
var regex = new Regex(@"(?<='[').*?(?='])", RegexOptions.Compiled);
while (loop_condition) {
List<string> TheListOfStrings = regex.Matches(input)
.Cast<Match>()
.Select(m => m.Value)
.ToList();
...
}
这可以满足您的需求:(?<='[")[^"]+(?="'])|(?<='[')[^']+(?=''])
对于a['bc']d['ef']gh']
,返回bc
和ef