简体   繁体   English

如何在C#中获取子字符串的值

[英]How to get back value of substring in c#

I want to getBack param from a string as : 我想从字符串getBack参数为:

Lorem ipsum dolor sit amet, %param% consectetur adipiscing elit. Ut placerat risus vitae augue vestibulum imperdiet. Nullam ac urna pellentesque purus hendrerit convallis. Morbi bibendum augue sed mi faucibus, sit amet scelerisque augue interdum. Aenean iaculis lacus ut sapien imperdiet mollis.

I tried to use : 我尝试使用:

texte.Split(new char[] {'%'});

It just split my text, how can I split with a start char and an end char ? 它只是拆分了我的文本,我怎样才能用开始字符和结束字符分开?

Following regex should help: 以下正则表达式应有所帮助:

var regex = new Regex(@"%(?<param>.*?)%");
var match = regex.Match("Lorem ipsum dolor sit amet, %param% consectetur adipiscing elit. Ut placerat risus vitae augue vestibulum imperdiet. Nullam ac urna pellentesque purus hendrerit convallis. Morbi bibendum augue sed mi faucibus, sit amet scelerisque augue interdum. Aenean iaculis lacus ut sapien imperdiet mollis.");
if(match.Success)
{
    string result = match.Groups["param"].Value;
}

If there are multiple matches, following code will help: 如果有多个匹配项,则以下代码将有所帮助:

string subject = "Lorem ipsum dolor sit amet, %param% consectetur %454% adipiscing elit. Ut placerat risus vitae augue vestibulum imperdiet. Nullam ac urna pellentesque purus hendrerit convallis. Morbi bibendum augue sed mi faucibus, sit amet scelerisque augue interdum. Aenean iaculis lacus ut sapien imperdiet mollis.";
var matches = Regex.Matches(subject, @"%(?<param>.*?)%");
foreach (Match match in matches)
{
    string result = match.Groups["param"].Value;
}

This should work .. 这应该工作..

string str = "Lorem ipsum dolor sit amet, %param% consectetur adipiscing elit. Ut placerat risus vitae augue vestibulum imperdiet. Nullam ac urna pellentesque purus hendrerit convallis. Morbi bibendum augue sed mi faucibus, sit amet scelerisque augue interdum. Aenean iaculis lacus ut sapien imperdiet mollis.";
var param = str.Substring(str.IndexOf('%') + 1, str.IndexOf('%', (str.IndexOf('%') + 1)) - str.IndexOf('%') - 1);

You could do it using a foreach -loop although it might not be very efficient, depending on the length of your string. 您可以使用foreach -loop来执行此操作,尽管它可能不是很有效,具体取决于字符串的长度。

string input = "Lorem ipsum dolor sit amet, %param% consectetur adipiscing elit. Ut placerat risus vitae augue vestibulum imperdiet. Nullam ac urna pellentesque purus hendrerit convallis. Morbi bibendum augue sed mi faucibus, sit amet scelerisque augue interdum. Aenean iaculis lacus ut sapien imperdiet mollis."
StringBuilder param = new StringBuilder();
List<string> params = new List<string>();
bool writingParam = false;

foreach(char c in input) {
  if(!writingParam && c == '%') {
    writingParam = true;
  }
  else if(writingParam) {
    if(c != '%') {
      param.Append(c);
    }
    else {
      params.Add(param.ToString());
      param = new StringBuilder();
      writingParam = false;
    }
  }
}

You will end up with at list of strings containing all strings enclosed in % . 您将最终得到包含所有包含在%中的字符串的字符串列表。

If there is only a single %param% in the string that you can find it using indexOf and lastIndexOf 如果字符串中只有一个%param%,则可以使用indexOf和lastIndexOf找到它

int len = input.Length;
int pos1 = input.IndexOf("%");
int pos2 = input.LastIndexOf("%");

string response = "";
if (pos1 != -1 && pos2 != -1 && (pos2 >= pos1))
{
    response = s.Substring(pos1 + start.Length, pos2 - pos1 - start.Length);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM