c# - 正则表达式:匹配任何文本的模式,后跟特定的封闭格式
问题描述
我试图找到使用正则表达式从 URL 获取数据的方法,URL 是这样构建的:
https://myurl.com/action?AAA={10/17/2018 08:00:00}&BBB={XXX123}&CCC={DATA_DATA}&DDD={29696}&EEE={10/17/2018 08:00:00}&FFF={CCC}&GGG={SOMEINFO}&HHH={7234384}&III={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}
基本上我期望得到的是这样的字符串列表:
AAA={10/17/2018 08:00:00}&
BBB={XXX123}&
CCC={DATA_DATA}&
DDD={29696}&
EEE={10/17/2018 08:00:00}&
FFF={CCC}&
GGG={SOMEINFO}&
HHH={7234384}&
III={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}
通过代码,我删除了第一个 URL 部分(https://myurl.com/action?)所以我可以使用 Regex.Split 之类的东西来生成最终列表,但是找不到匹配模式的简单方法,它应该是这样的:
任何东西={任何东西}
我试过使用 ". ={. }" 但没有用,也没有任何运气 @"/\w+={[]}"
解决方案
您可以使用这些匹配项
(\w+)={([^{}]*)}
请参阅正则表达式演示。
细节
(\w+)
- 第 1 组:一个或多个单词字符={
- 一个={
子串([^{}]*)
{
- 第 2 组:除和之外的任何 0+ 个字符}
}
- 一个}
字符。
var s = "https://myurl.com/action?\nAAA={10/17/2018 08:00:00}&\nBBB={XXX123}&\nCCC={DATA_DATA}&\nDDD={29696}&\nEEE={10/17/2018 08:00:00}&\nFFF={CCC}&\nGGG={SOMEINFO}&\nHHH={7234384}&\nIII={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}";
var res = Regex.Matches(s, @"(\w+)={([^{}]*)}")
.Cast<Match>()
.ToDictionary(
m => m.Groups[1].Value,
m => m.Groups[2].Value);
foreach (var kvp in res)
Console.WriteLine("{0} => {1}", kvp.Key, kvp.Value);
输出:
AAA => 10/17/2018 08:00:00
BBB => XXX123
CCC => DATA_DATA
DDD => 29696
EEE => 10/17/2018 08:00:00
FFF => CCC
GGG => SOMEINFO
HHH => 7234384
III => https://www.otherurl.com/Page?utm_source=email&utm_medium=medium
推荐阅读
- python - 如何确保我的 Django 单例模型在启动时存在?
- android - android - 如何从另一个类更新 mutablieLiveData
- django - 如何运行 Django 定期任务对象的任务 [django-celery-beat]
- java - Log4j2 将记录到控制台,但不是 log.txt 文件
- angularjs - 使用 Ionic 从 Firebase 显示值时遇到问题
- python - 获取所有元素的列表增量计数
- java - 在 JCommander 中出现错误,java 中的 java.lang.NoClassDefFoundError
- mysql - KoolReport 在 laravel vuejs 中显示空白页
- python - Python:熊猫数据框在每一行中拆分字符串,偶尔有空行
- android - Flutter本地通知onSelectNotification点击本地通知时无法打开新页面