从字符串中的一些char获取子字符串

时间:2016-08-17 17:44:28

标签: c# string substring

我正在尝试从下面的字符串中获取子字符串即地址

string test = "name: abc loc: xyz address: tfd details: ddd";

是否有任何子字符串选项只能获取地址详细信息,例如" tfd"

我正在尝试分裂,我认为这不是获得中间字符串的最佳选择。

test.Text.Split(':').LastOrDefault()

5 个答案:

答案 0 :(得分:3)

简单功能:

public static string GetTextBetween(string content, string start, string end)
{
    if (content.Length == 0 || start.Length == 0 || end.Length == 0)
        return string.Empty;
    string contentRemove = content.Remove(0, content.IndexOf(start, StringComparison.Ordinal) + start.Length);
    return contentRemove.Substring(0, contentRemove.IndexOf(end, StringComparison.Ordinal)).Trim();
}

示例:

GetTextBetween("name: abc loc: xyz address: Thomas Nolan Kaszas 5322 Otter LnMiddleberge FL 32068 details: ddd", "address:", "details:")

你会得到:

  

Thomas Nolan Kaszas 5322 Otter LnMiddleberge FL 32068

答案 1 :(得分:2)

这是一种使用正则表达式的方法:

var pattern = @"name: (\S+) loc: (\S+) address: (\S+) details: (\S+)";
var match = Regex.Match(input, pattern);
var group = match.Groups[3];
var value = group.Value;

一些假设:

  • 地址总是一个字,即没有空格,
  • 模式将始终相同,相同的字段,顺序相同,字段名称中没有区别等。

答案 2 :(得分:2)

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec
import numpy as np

One = range(1,10)
Two = range(5, 14) 
l = len(One)
fig = plt.figure(figsize=(10,6))
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3]) 

ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
plt.ylabel("Number of occurrence", y=-0.8)          ##  ← ← ← HERE

ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)

ax2 =  plt.subplot(gs[2])
ax2.bar(range(l), One)

plt.show()

答案 3 :(得分:2)

我个人更喜欢Regex解决方案,但我想添加一个非正则表达式:

string test = "name: abc loc: xyz address: t f d details: ddd";
int start = test.IndexOf("address:");
int end = test.IndexOf("details:");
string adr = test.Substring(start, end-start);
Console.WriteLine(adr);

打印

t f d

所以我知道这个版本适用于空格。

编辑:

您可能希望运行adr.Trim()或修改两个IndexOf调用中的字符串,以删除返回字符串两侧的空格。

答案 4 :(得分:2)

根据建议使用一些符合您需求的正则表达式

Match m = new Regex( @"address:\s(.*)\sdetails" ).Match( test );
if ( m.Groups.Count > 0 )
    { string s = m.Groups[1].Value; }