从字符串中提取数据的最佳方法
本文关键字:最佳 方法 数据 提取 字符串 | 更新日期: 2023-09-27 18:02:29
我有一个字符串:
__cfduid=d2eec71493b48565be764ad44a52a7b191399561601015; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.planetminecraft.com; HttpOnly
我想用正则表达式得到这样的东西:
[0] = __cfduid=d2eec71493b48565be764ad44a52a7b191399561601015
[1] = expires=Mon, 23-Dec-2019 23:50:00 GMT
[2] = path=/
[3] = domain=.planetminecraft.com
[4] = HttpOnly
我试过这个regex:
['A|;](.*?)['Z|;]
我不明白为什么'A
。工作,但['A]
不,我怎么能创建('A
或;
)?
在这个正则表达式的最终形式中,我想从字符串this中得到:
[0] = {
[0] = __cfduid
[1] = d2eec71493b48565be764ad44a52a7b191399561601015
}
[1] = {
[0] = expires
[1] = Mon, 23-Dec-2019 23:50:00 GMT
}
[2] = {
[0] = path
[1] = /
}
[3] = {
[0] = domain
[1] = .planetminecraft.com
}
[4] = {
[0] = HttpOnly
}
你可以尝试匹配这个正则表达式:
's*([^=;]+)(?:=([^=;]+))?
描述:
's* # Match any spaces
([^=;]+) # Match any non = or ; characters
(?:
= # Match an = sign
([^=;]+) # Match any non = or ; characters.
)? # Make this group optional
regex101演示在代码:string text = "__cfduid=d2eec71493b48565be764ad44a52a7b191399561601015; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.planetminecraft.com; HttpOnly";
var regex = new Regex(@"'s*([^=;]+)(?:=([^=;]+))?");
var matches = regex.Matches(text);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value + "'n" + match.Groups[2].Value + "'n");
}
ideone演示 'A
可以工作,但['A]
不能,因为当您将'A
放在字符类中时,它会像大多数regex元字符一样失去其意义。例如,+
和*
也失去了它们的意义。在['A]
中,regex实际上是在尝试匹配'A
,因为它在字符类中没有特定的含义,它意味着文字A
。
方括号创建字符类;您需要括号进行分组,最好是非捕获组。并且您需要使用正向向前看断言而不是第二组,因为每个分号只能匹配一次:
(?:'A|;)(.*?)(?='Z|;)
仍然没有得到你的参数/值对,所以你可能需要更具体:
(?:'A|;'s*)([^=]*)(?:=([^;]*))?(?='Z|;)
([^=]*
匹配除=
以外的任意字符)
在regex101.com上观看直播