我试图拆开一个字符串并在两个"#"之间获取文本。我已经找到了用Java和PHP做的方法,我假设它们在C#中相似,我只是吉普失败并且非常确定它的PEBKAC。所以我虽然会问。
示例 - 我想以编程方式取出" filenameid"和"姓名"从这个字符串:
'#filenameid#30天#名称#的.xls'
答案 0 :(得分:5)
尝试拆分:
String source = "#filenameid#30day#Name#.xls";
String[] chunks = source
.Split(new Char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
然后采取适当的块:
String id = chunks[0];
String period = chunks[1];
String name = chunks[2];
答案 1 :(得分:2)
使用捕获组。
@"#([^#]*)#"
从组索引1中获取所需的字符串。请注意,此处的外观不起作用。
答案 2 :(得分:2)
如果您的字符串格式相同,则可以执行以下操作:
string a = "#filenameid#30day#Name#.xls";
string[]split=a.Split('#');
string fileID = split[1];
string name = split[3];
答案 3 :(得分:0)
您可以使用Regex实现它。
void Main()
{
const string Expression = @"#([^#]*)*#";
const string TestSample = @"'#filenameid#30day#Name#.xls'";
Regex regex = new Regex(Expression);
regex.Matches(TestSample)
.Cast<Match>()
.Select(match => match.Captures[0].Value.Replace("#", ""))
.ToList()
.ForEach(Console.WriteLine);
}
答案 4 :(得分:0)
以下是该问题的低级解决方案:
static void Main(string[] args) {
string text = "#filenameid#30day#Name#.xls";
int frameStart = 0;
int match = 0;
// loop on characters
for(int i = 0; i < text.Length; i++) {
char c = text[i];
switch(c) {
case '#':
// evaluate frame (text between meshes)
switch(match) {
// match at index 1
case 1:
Console.Write("filenameid=");
Console.WriteLine(text.Substring(frameStart, i - frameStart));
break;
// match at index 3
case 3:
Console.Write("name=");
Console.WriteLine(text.Substring(frameStart, i - frameStart));
break;
}
// move to next frame
frameStart = i + 1;
match++;
break;
}
}
// count of matches is match + 1
Console.ReadKey();
}