【问题标题】:Regex for extracting key-value pair from HTTP Query String用于从 HTTP 查询字符串中提取键值对的正则表达式
【发布时间】:2018-04-03 17:30:58
【问题描述】:

我正在使用一个数据分析包,它公开了一个用于字符串解析的正则表达式函数。我正在尝试解析来自格式为...的网站的响应...

key1=val1&key2=val2&key3=val3 ...

[有可能键和值可能是百分比编码的,但当前返回值不是,当前返回值是令牌和其他字母数字信息]。

我理解此数据是 www-form-urlencoded,或者它可能被称为查询字符串格式。

如果不能依赖键的顺序,则对象是提取给定键的值。例如,我可能知道我应该收到的键之一是“token”,那么我可以使用什么正则表达式模式来提取键“token”的值?我已经搜索过,但找不到任何我需要的东西,但如果有重复的问题,请提前道歉。

【问题讨论】:

  • 尝试通常的[?&]token=([^&]*),一种基于捕获组的模式。或者回顾一下,(?<=[?&]token=)[^&]*
  • 您使用哪种编程语言?可能有用于该常见任务的功能...
  • @Wiktor Stribiżew 刚刚发现了一些东西,似乎比我想象的要简单... key2=([^\&]+)。忘了说谢谢你的回复,非常感谢。
  • @Jan 这是一个名为 Alteryx 的应用程序,不是一种语言,但我认为它是用 C# 编写的。 C# 中有可爱的查询字符串解析器,但它们没有直接公开。感谢您的回复。

标签: regex querystringparameter alteryx


【解决方案1】:

在 Alteryx 中,您可以将 Tokenize 与包含捕获组的正则表达式一起使用,围绕您需要提取的部分:

Tokenize 方法允许您指定要匹配的正则表达式,并将字符串的该部分解析为单独的列(或行)。使用 Tokenize 方法时,您希望匹配整个令牌,并且如果您有标记组,则仅返回该部分

我将方法描述中证明如果有捕获组的部分加粗,将只返回这部分而不是整个匹配。

因此,您可以使用

(?:^|[?&])token=([^&]*)

你可以使用任何键来代替token,而不是你想要提取的值。

请参阅regex demo

详情

  • (?:^|[?&]) - 字符串的开头,?&(如果字符串只是一个普通的键值对字符串,您可以省略 ? 并使用 (?:^|&)(?<![^&])
  • token - 关键
  • = - 等号
  • ([^&]*) - 第 1 组(将被提取):除 & 之外的 0 个或多个字符(如果您不想提取空值,请将 * 替换为 + 量词)。

【讨论】:

  • 很好的答案!非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多