我是正则表达式和编程的新手。我正在使用的语言是C# 所以我正在从包含音乐的文本文件中创建这个数据挖掘程序。 基本上我有这样的字符串:
gr1 gr1 gr1 gr1 d2K gr1 d2L d2L m2L gr1 gr1 gr1 gr1 gr1 m2K m2L d3L d3K m2K gr1 gr1 gr1 gr1 d2K d2L gr1 gr1 gr4L gr1 gr1 gr1 gr1 gr1 gr1 d2K gr1 d2L d2K gr1 d2L gr1 gr5K gr1 gr1 gr1 gr1 d2K gr1 d2L d2L m2L gr1 gr1 gr1 gr1 gr1 m2K m2L d3L d3K m2K gr1 gr1 gr1 gr1 d2K d2L gr1 gr1 gr4L gr1 gr1 gr1 gr1 gr1 gr1 d2K gr1 d2L d2K gr1 d2L gr1 gr1 gr1 gr1 gr1 gr1 m3L m3K gr1 gr1 d2K d2L d3K gr1 gr5L gr1 gr1
而我正试图找到“gr1 gr1”,但它总是错过它并且只能部分工作。 我正在使用此代码:
String temp2 = "gr1 gr1";
String temp = "\\b" + temp2 + "\\b";
int vv = Regex.Matches(mystring, temp).Count;
但是vv总是= 0。 我做错了什么?
确定将代码更改为:
String temp1 = "\\b.*\\b";
String temp2 = suskaldyta_pask_str[i].Replace(" ", temp1);
String temp = "(?=\\b" + temp2 + "\\b)";
似乎至少给了我一些反抗。如果它工作正常,但不太需要,但需要一些测试和阅读。 :)
好吧我认为问题在于temp1 as。*很可能意味着它忽略了br1 bla bla bla br1之间的文本并将其计为br1 br1。
谢谢你们,但没有任何帮助。快速需要它,因此使用3为cicles。可能有点粗野,但工作得很完美:)主题可能会被认为是封闭的。
答案 0 :(得分:0)
\b
在字符串中用作转义序列。你可以这样做:
String temp = @"\b" + temp2 + @"\b";
// or
String temp = "\\b" + temp2 + "\\b";
这只会匹配由空格分隔的行中的两个gr1
。
答案 1 :(得分:0)
为什么你更喜欢正则表达式.IndexOf
?
string text = "gr1 gr1 gr1 gr1 d2K gr1 d2L d2L m2L gr1 gr1 gr1 gr1 gr1 m2K m2L d3L d3K m2K gr1 gr1 gr1 gr1 d2K d2L gr1 gr1 gr4L gr1 gr1 gr1 gr1 gr1 gr1 d2K gr1 d2L d2K gr1 d2L gr1 gr5K gr1 gr1 gr1 gr1 d2K gr1 d2L d2L m2L gr1 gr1 gr1 gr1 gr1 m2K m2L d3L d3K m2K gr1 gr1 gr1 gr1 d2K d2L gr1 gr1 gr4L gr1 gr1 gr1 gr1 gr1 gr1 d2K gr1 d2L d2K gr1 d2L gr1 gr1 gr1 gr1 gr1 gr1 m3L m3K gr1 gr1 d2K d2L d3K gr1 gr5L gr1 gr1";
string pattern = "gr1 gr1";
int count = 0;
int index = -1;
while ((index = text.IndexOf(pattern, index + 1)) != -1)
count++;
Console.WriteLine(count);