匹配键值模式正则表达式

2023-12-14

我正在制作一个键值解析器,其中输入字符串采用以下形式key:"value",key2:"value"。键可以包含字符a-z, A-Z and 0-9和值可以包含任何字符,但:, ,," and \需要以反斜杠为前缀。逗号用于分隔键值对,但在最后一对之后不需要。

到目前为止我已经([a-zA-Z0-9]+):"(.*)"它将匹配大多数键和值,但显然它无法处理超过一对或任何“控制”字符未转义的情况。(?<=\\)[:,"\\]似乎匹配所有转义字符,但它不会匹配任何“正常”字符。

有没有办法检查逗号分隔并匹配所有转义的“控制”字符以及正常字符?这是更适合在没有正则表达式的情况下实现的东西,还是需要按顺序使用多个模式?

一些例子:

input: joe:"bread",sam:"fish"输出:joe -> bread sam -> fish

input: joe:"Look over there\, it's a shark!",sam:"I like fish."输出:joe -> Look over there, it's a shark! sam -> I like fish


您可以使用下面的正则表达式来获取键值对。

([a-zA-Z0-9]+):"(.*?)(?<!\\)"

OR

([a-zA-Z0-9]+):"(.*?)"(?=,[a-zA-Z0-9]+:"|$)

DEMO

Java正则表达式是,

"([a-zA-Z0-9]+):\"(.*?)(?<!\\\\)\""

(?<!\\)"负向后查找断言双引号前面不会有反斜杠字符。在java中,要匹配反斜杠字符,您需要将模式中的反斜杠转义三次,即\\\\

DEMO

String s = "joe:\"Look over there\\, it's a shark!\",sam:\"I like fish.\"";

Matcher m = Pattern.compile("([a-zA-Z0-9]+):\"(.*?)(?<!\\\\)\"").matcher(s);
    while(m.find())
    {
        System.out.println(m.group(1) + " --> " + m.group(2));
    }
}

Output:

joe --> Look over there\, it's a shark!
sam --> I like fish.

OR

String s = "joe:\"Look over there\\, i\\\"t's a shark!\",sam:\"I like fish.\"";

Matcher m = Pattern.compile("([a-zA-Z0-9]+):\"((?:\\\\\"|[^\"])*)\"").matcher(s);
    while(m.find())
    {
        System.out.println(m.group(1) + " --> " + m.group(2));
    }
}

Output:

joe --> Look over there\, i\"t's a shark!
sam --> I like fish.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匹配键值模式正则表达式 的相关文章

随机推荐

  • Qt:meta.enumeratorCount() 没有为 Q_OBJECT 中的枚举提供元数据,为什么?

    我有以下课程 我尝试获取一些元数据enum MyEnum 然而 当循环结束时meta enumeratorCount 它的计数始终为 0 基本上我在关注这个例子在这里 为了找到问题 我也尝试了同样的方法 同样的问题 方法计数 0 代码编译
  • 从一列中的唯一值创建 Pandas 数据框

    我有一个包含 1000 行的 Pandas 数据框 它有Names列包括客户名称及其记录 我想根据每个客户的唯一名称为他们创建单独的数据框 我将唯一的名称放入列表中 customerNames DataFrame customer name
  • Google Slides API,能够使用十六进制设置颜色吗?

    是否可以使用十六进制格式设置元素形状背景颜色 例如 B6D7A8 我在这里看到一个例子 Google Slides API 如何更改特定颜色的所有形状的文本颜色 然而 Google Slide API 参考并没有提及它 我想确定一下 特别是
  • MIME 类型“image/jpg”与“image/jpeg”相同吗?

    很简单的问题 但似乎无法在网上找到它 我正在尝试制作一个程序 根据文件类型会给我扩展名 No image jpg不等于image jpeg 你应该使用image jpeg Only image jpeg被识别为 JPEG 文件的实际 mim
  • 是否有主日期时间模式适用于每个类似的日期时间模式

    我的消费者收到的时间格式是String有价值20 5 14 9 22 25 or 20 5 14 9 22 5 or 20 5 14 12 22 25 or 20 10 14 9 2 25 etc 以上所有内容都有非常不同的日期时间模式yy
  • struts 2中的多个文件上传

    我在使用struts2上传文件时遇到问题 我有多个文件标签 例如
  • 如何在matlab中用scatter3图在同一图中绘制等值面?

    我有一个 3D 体积和一个 3D 点云 我怎样才能绘制点云以及isosurface体积 而不覆盖散点图 使用patch绘制等值面总是会擦掉scatter3 plot 有些事情要尝试 首先绘制使用补丁的表面 h patch 然后设置hold
  • 无法连接 Websphere MQ 队列管理器

    我是 WebSphere MQ 的初学者 我正在研究 MQ 6 并且它工作正常 但现在我已经安装了 MQ 7 1 当我尝试创建一个新的队列管理器时 我可以做到 但它无法连接并且它给了我以下错误 你对此有什么想法吗 谢谢 如果使用以下命令安装
  • Linq 获取高于姓氏的项目

    问候 我正在尝试找到一种使用 Linq to SQL 来获取姓氏高于 Jan 的前 15 条记录的方法 当我在 SQL 中使用它时 我得到了姓氏以字母顺序高于 Jan 的任何字母开头的每个成员 然而使用query Where m gt m
  • Python Numpy 累积/差异[重复]

    这个问题在这里已经有答案了 我希望扭转 numpy 的 cumsum 函数的效果 即累积 运行总计 查看下面的代码 我将数字 1 到 10 分配给 a 将这些数字的运行总和分配给 b 我需要反转这个过程 即从b计算a 我可以对此进行编码 参
  • 计算本地存储空间的使用情况

    我正在使用 Bespin 编辑器和 HTML5 的 localStorage 创建一个应用程序 它在本地存储所有文件并帮助语法 使用 JSLint 和其他一些 CSS 和 HTML 解析器来帮助用户 我想计算已使用了多少 localStor
  • 在 C# 中从外部应用程序获取 UI 文本

    是否可以从 C 中的外部应用程序获取 UI 文本 特别是 有没有办法从第三方编写的外部 Win32 应用程序的标签 我假设它是普通的 Windows 标签控件 读取 Unicode 文本 文本可见 但无法在 UI 中通过鼠标选择 我假设有一
  • JodaTime - 检查 LocalTime 是否在现在之后以及现在在另一个 LocalTime 之前

    我正在尝试检查当前时间是否是在开始之后LocalTime在另一个终点之前LocalTime即开始时间加上 11 小时 如果开始时间为 11 00 结束时间为 22 00 则效果很好 但是 当我尝试比较开始时间 16 00 和结束时间 03
  • T-SQL:将新的 INSERT 标识返回给 C#

    我使用存储过程将值放入 SQL Server 该过程将向所添加的行添加一个 ID 我需要将此 ID 返回到我的代码中 目前我可以在 Visual Studio 的 OUTPUT 窗口中看到输出 id 但似乎无法在我的代码中捕获它 这是该过程
  • 如何从另一个java程序中运行.jar文件?

    我有一个 jar 文件 可以在命令行上运行 java jar myFile jar argument1 我想将此 jar 的输出保存为另一个 java 程序中的字符串变量 我该怎么做 我尝试将 myFile jar 作为参考包含在我的程序中
  • 如何映射 Java 流中的 RuntimeExceptions 以从无效流元素中“恢复”

    想象一下 我正在构建一个库 它将接收整数流 而库代码所需要做的就是返回一个字符串流 其中包含数字的字符串表示形式 public Stream
  • 如何使用awk根据前两个字段找出第三个字段的最大值

    文件内容如下 333379266 834640619 88 333379280 834640621 99 333379280 834640621 66 333376672 857526666 99 333376672 857526666 7
  • 重用浏览器实例 puppeteer

    我想知道是否可以有一个 js 文件来打开浏览器实例 创建新页面 选项卡登录到网站 使用用户名 密码 并保持空闲状态 在第二个 js 文件中使用文件一个浏览器实例及其页面 1 js const puppeteer require puppet
  • 如何编写注释/方面以不进入方法但在给定条件为 false 时返回 null?

    我目前有一个要求 如果给定条件为 false 则需要从 100 个方法中返回 null 我正在考虑为此使用 Java Annotations 或 Spring Aspects 这样我就不必到处编写 if else 代码块 知道如何使用 Ja
  • 匹配键值模式正则表达式

    我正在制作一个键值解析器 其中输入字符串采用以下形式key value key2 value 键可以包含字符a z A Z and 0 9和值可以包含任何字符 但 and 需要以反斜杠为前缀 逗号用于分隔键值对 但在最后一对之后不需要 到目