答案 0 :(得分:0)
使用正则表达式可以执行以下操作:
string pattern = string.Format("{0}(.*){1}",firstString,secondString);
var matches = Regex.Matches(myString, pattern);
foreach (Match match in matches)
{
foreach (Capture capture in match.Captures)
{
//Do stuff, with the current you should remove firstString and secondString from the capture.Value
}
}
之后使用Regex.match查找与之前构建的模式匹配的字符串 记得要逃避正则表达式的所有特殊字符。
答案 1 :(得分:0)
您可以使用Regex.Matches
,我在此示例中使用X
作为分隔符:
var fileContents = "Xsomething1X Xsomething2X Xsomething3X";
var results = Regex.Matches(fileContents, @"(X).*?(\1)");
您可以循环results
以使用匹配项执行任何操作。
正则表达式中的\1
表示"引用第一个组"。我已将X
放在()
之间,因此它将成为第1组,我使用\1
表示此地方的匹配应与该组完全相同1。
答案 2 :(得分:0)
RS
代表Record Separator,它的值为30(或十六进制为0x1E)。您可以使用此正则表达式:
\x1E([\w\s]*?)\x1E
匹配RS,然后匹配任何字母,数字或空格,然后匹配RS。 ?
是为了使正则表达式匹配尽可能少的字符,以防后来有更多的RS字符。
如果您不想匹配数字,可以使用[a-zA-Z\s]
代替[\w\s]
。
示例:
string fileContents = "Something \u001Eyour string\u001E more things \u001Eanother text\u001E end.";
MatchCollection matches = Regex.Matches(fileContents, @"\x1E([\w\s]*?)\x1E");
if (matches.Count == 0)
return; // Not found, display an error message and exit.
foreach (Match match in matches)
{
if (match.Groups.Count > 1)
Console.WriteLine(match.Groups[1].Value);
}
如您所见,您获得了Match
的集合,每个match.Value
将包含完整的匹配字符串,包括分隔符。 match.Groups
将包含所有匹配的组,第一个是整个匹配的字符串(默认为默认值),然后是每个组(括号之间的那些组)。在这种情况下,你的正则表达式中只有一个,所以你只需要该列表中的第二个。
答案 3 :(得分:0)
您不需要正则表达式。
阅读文件内容(File.ReadAllText
)。
拆分分隔符(String.Split
)。
如果您知道字符串只出现一次,请取第二个数组元素(result[1]
)。否则,请采取其他所有条目(result.Where((x, i) => i % 2 == 1)
)。