[英]Extracting an unknown string between two known strings
我有以下字符串:
string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]"
我需要将“ RANDOM MESSAGE”(不带引号)放入一个单独的字符串中。 现在,如果RANDOM MESSAGE是常数,则很容易,但事实并非如此。 假设它是通过用户输入生成的,并且每次的值和长度都不同。
我将如何从那里提取该消息? 我尝试将Substring与IndexOf一起使用,但是每次都得到错误的结果,这非常令人困惑。
您可以使用正则表达式来获取它:
string input = "[[\\\"nextData\\\", \\\"RANDOM MESSAGE\\\"], [\\\"moreInfo\\\", {\\\"num\\\": 3204}]]";
string pattern = "^\\[\\[\\\\\"nextData\\\\\",\\s*\\\\\"(?<message>[\\S ]+)\\\\\"\\],\\s*\\[\\\\\"moreInfo\\\\\",\\s*\\{\\\\\"num\\\\\":\\s*\\d+\\}\\]\\]$";
Regex r1 = new Regex(pattern);
Match match = r1.Match(input);
if (match.Success)
Console.WriteLine(match.Groups["message"].Value);
如果您想使用“蛮力”方法:
String nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
String tmp = nextEvent.Trim(new Char[] { '[', ']' });
String[] sa = tmp.Split(',');
String rndMsg = sa[1].Trim().Trim(new Char[] { '[', ']', '\"' });
您可以使用以下简单的拆分:
string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
var strs = nextEvent.Split(']');
var ds = strs[0].Split(',');
var m = ds[1].TrimStart('"', ' ');
m = m.TrimEnd('"');
第三种可能的解决方案虽然效果不是很好,但它是这样的:
带您将字符串解析为字典:
String nextEvent="[[\"nextData\",\"RANDOM MESSAGE\"],[\"moreInfo\",{\"num:\": 3204}]]";
Dictionary<string, object> dict = JSON.Parse<Dictionary<string,object>>(nextEvent);
String randomMessage = dict("nextData");
当您使用这种格式的字符串很长并且必须从中提取多个“字段”时,这变得很重要
如果之前/之后的字符串是常量,则可以通过执行以下操作获得随机消息部分:
int startIndex = ("[[\"nextData\", \"").Length;
int endIndex = nextEvent.IndexOf(", [\"moreInfo\"");
string randomMessage = nextEvent.Substring(startIndex, endIndex - startIndex );
您还可以使用Split
从目标区域开始获取字符串:
string[] temp = nextEvent.Split(new string[] { "[[\"nextData\", \"" }, StringSplitOptions.None);
//temp[1] = "RANDOM MESSAGE..."
使用JSON.NET
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class Test
{
static void Main()
{
string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
JObject json = JObject.Parse("{\"j\":" + nextEvent + "}");
string randomMessage = (string)json["j"][0][1];
Console.WriteLine(randomMessage); // gives "RANDOM MESSAGE"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.