Java 正则表达式帮助:捕获键值对

2024-01-21

我正在尝试从具有以下形式的字符串中捕获键值对:

a0=d235 a1=2314 com1="abcd" com2="a b c d"

使用来自的帮助这个帖子 https://stackoverflow.com/questions/168171/regular-expression-for-parsing-name-value-pairs,我能够编写以下正则表达式来捕获键值对:

Pattern.compile("(\\w*)=(\"[^\"]*\"|[^\\s]*)");

问题是该模式中的第二组也捕获了引号,如下所示:

a0=d235
a1=2314
com1="abcd"
com2="a b c d"

如何排除引号?我想要这样的东西:

a0=d235
a1=2314
com1=abcd
com2=a b c d

EDIT:

可以通过根据是否有引号来捕获不同组中的值来实现上述目的。我正在为解析器编写这段代码,因此出于性能原因,我试图提出一个可以返回同一组编号中的值的正则表达式。


这个怎么样?这个想法是将最后一组分成两组。

Pattern p = Pattern.compile("(\\w+)=\"([^\"]+)\"|([^\\s]+)");

String test = "a0=d235 a1=2314 com1=\"abcd\" com2=\"a b c d\"";
Matcher m = p.matcher(test);

while(m.find()){
    System.out.print(m.group(1));
    System.out.print("=");
    System.out.print(m.group(2) == null ? m.group(3):m.group(2));
    System.out.println();
}

Update

这是针对更新后的问题的新解决方案。该正则表达式应用积极的前瞻和后瞻来确保存在引用而无需实际解析它。这样,上面的组 2 和组 3 就可以放在同一组中(下面的组 2)。返回组 0 时无法排除引号。

Pattern p = Pattern.compile("(\\w+)=\"*((?<=\")[^\"]+(?=\")|([^\\s]+))\"*");

String test = "a0=d235 a1=2314 com1=\"abcd\" com2=\"a b c d\"";
Matcher m = p.matcher(test);

while(m.find()){
    print m.group(1);
    print "="
    println m.group(2);
}

Output

a0=d235
a1=2314
com1=abcd
com2=a b c d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 正则表达式帮助:捕获键值对 的相关文章

  • 至少 6 个字符正则表达式 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找至少检查 6 个字符的正则
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • Grails 项目 - Servlet 调用 - ClassNotFoundException:javax.servlet.AsyncContext

    我在用 IntelliJ IDEA 终极版 12 4 grails 2 2 0 BuildConfig groovy 文件中的 grails servlet version 2 5 并实现了简单的 servlet post 请求 使用 RE
  • 在 json 中解析尾随字符

    我正在尝试检查 json 是否有效 并且我遇到了奇怪的行为 当我将一些字符附加到可解析的 json 时 jackson 和 gson 都会解析它 并且它们会忽略尾随字符 我想检查 json 是否严格有效 请帮忙 我尝试了几个标志mapper
  • 有没有办法让Maven自动下载快照版本?

    所以我有一个项目依赖于另一个项目的快照版本 依赖关系是
  • 如何将日期字符串解析为Date? [复制]

    这个问题在这里已经有答案了 如何将下面的日期字符串解析为Date object String target Thu Sep 28 20 29 30 JST 2000 DateFormat df new SimpleDateFormat E
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • 为什么当达到 InitiatingHeapOccupancyPercent 时 G1 不开始标记周期?

    根据文档 http www oracle com technetwork articles java g1gc 1984535 html XX InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • 在 libgdx 中渲染 box2d

    我有一个使用 FitViewport 的大小为 800x480 的游戏世界 并且最初使用像素渲染 box2d 实体 固定装置 因此所有物理效果都显得浮动且缓慢 查看文档后 我意识到 box2d 使用度量单位 因此我将 box2d 位置和大小
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • Java 8 Stream - 并行执行 - 不同的结果 - 为什么?

    假设我有一个List
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • 在 servlet 会话和 java.io.NotSerializedException 中保存对象

    SEVERE IOException while loading persisted sessions java io WriteAbortedException writing aborted java io NotSerializabl
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr

随机推荐

  • 水晶报表隐藏列

    我有一个包含几列的水晶报告 我需要隐藏一列并根据条件删除空白 目前我所做的是 我已将字段拖放到 TextObject 内 并勾选 抑制嵌入式空白字段行 和 Can Grow 它将隐藏详细信息字段并删除空格 但问题是标题仍然可见 隐藏列的条件
  • 如何在 Oracle 中向日期添加前导零?

    如果数字少于两位数 我需要在数字中添加前导零 并将两个这样的数字组合成一个数字 并且它们之间没有空格 我的尝试 select extract year from t Dt to char extract month from t Dt 09
  • Lucene.Net 和孵化状态

    我正在评估各种选项 以使我们的 Net 网站上的搜索功能更加强大 我需要研究一下我们是否购买软件 硬件 例如 Google Search Appliance GSA 还是使用 Lucene Net 等框架来开发解决方案 我们是一家初创公司
  • 阻止 Xcode 从静态库中删除未使用的符号

    我已经构建了一个静态库 我的 iOS 二进制文件正在链接其中 静态库的代码剥离已关闭 等等 我可以看到存档中的符号 通过 nm 因此 我将该库作为框架链接到我的应用程序中 但是 我实际上并没有直接调用该函数 因此 我可以看到我在二进制文件中
  • 如何将所有请求重定向到 laravel 5 中的 public/ 文件夹

    我有一个经典的 Laravel 5 项目结构 我需要将所有请求重定向到public 我处于经典的托管环境中 所以public 是我的文档根目录的子文件夹 我想这可以通过 htaccess 完成 但我仍然需要弄清楚如何完成 有人可以帮忙吗 T
  • Spring 上的嵌套事务

    在使用嵌套 Spring 事务时 我发现了一些奇怪的行为 当在同一个类中 一个方法注释为 Transactional调用另一个方法也注释为 Transactional不使用第二个注释 让我们考虑下面的类 public class Main
  • 如何在 Windows 7 x64 上的 python 3.4 中使用 OpenCV? [复制]

    这个问题在这里已经有答案了 I have windows 7 x64 and python 3 4 我尝试使用cv2 module import numpy as np import cv2 img cv2 imread messi5 jp
  • 如何为maven中属性集下声明的属性设置类路径

    我正在努力从 ant 构建工具转换为 Maven 工具 Ant build xml 已通过以下方式初始化属性
  • parse_dates 如何与 pd.read_sql_query 一起使用

    从 MySQL 数据库检索数据时 Pandas parse date 应该如何工作 的文档熊猫0 23 https pandas pydata org pandas docs stable generated pandas read sql
  • DAX 中的递归

    我不知道这是否可能 但我希望能够创建一个计算列 其中每行都依赖于其上方的行 一个典型的例子是斐波那契数列 https en wikipedia org wiki Fibonacci number 其中序列由递归关系定义F n F n 1 F
  • 电子邮件地址的正则表达式不起作用

    我正在尝试使用以下代码检查某些电子邮件地址是否正确 NSPredicate regexMail NSPredicate predicateWithFormat SELF MATCHES if regexMail evaluateWithOb
  • 存储倒排索引

    我正在从事一个关于信息检索的项目 我使用 Hadoop Python 制作了完整倒排索引 Hadoop 将索引输出为写入文件的 单词 文档列表 对 为了快速访问 我使用上面的文件创建了一个字典 哈希表 我的问题是 如何在磁盘上存储这样一个具
  • 为什么属性“禁用”而不是“启用”

    我总感觉disabledHTML 属性
  • 为什么 ui.item.attr("id") 返回未定义的值?

    我正在处理之间的可排序 li of ul 但当我试图得到ui item attr id 我未定义 但其他变量运行良好 例如 this attr id and ui sender attr id 但我正在搜索的索引 ul 元素从哪里拖动 我的
  • Rails Gem Devise 是否有解决方案允许用户拥有多个电子邮件?

    我正在寻找一种解决方案 允许我的应用程序上的用户拥有超过 1 封电子邮件 这应该与 Facebook LinkedIn 和 Quora 类似 一个帐户可以有多个电子邮件地址 其中 1 个作为主要电子邮件地址 是否有可用的设备交钥匙解决方案
  • 正确的 ARIA 处理面包屑导航

    可以采取哪些措施来提高面包屑菜单的可访问性 类似于 ul class breadcrumbs li a href Home a li li a href news News a li li class unavailable a href
  • Blazor - Web 组件 - WebAssembly - 微前端

    我正在研究微前端并能够使用不同技术构建功能 到目前为止 创建 Web 组件并在 Monolith 上使用它们是我发现的最佳方法 研究创建 Web 组件并在不同服务中提供模块的不同方法是一种有趣的体验 使用 Blazor 查看 WebAsse
  • 为什么添加简单的 SQL 查询作为 Power BI 数据源会阻止本机查询折叠?

    我已经添加了SQL数据源 然后 我没有选择表 而是输入了以下查询 SELECT ID NAME AGE FROM STUDENTS 当我右键单击该步骤时 我看到本机查询选项被禁用 为什么添加简单的 SQL 查询作为 Power BI 数据源
  • MS Access 准备好的语句

    是否可以在 MS Access 中对 VBA 中的本地表执行准备好的语句 如下所示 UPDATE part SET part description WHERE part id 如果是这样 它是如何完成的 Dim db As DAO Dat
  • Java 正则表达式帮助:捕获键值对

    我正在尝试从具有以下形式的字符串中捕获键值对 a0 d235 a1 2314 com1 abcd com2 a b c d 使用来自的帮助这个帖子 https stackoverflow com questions 168171 regul