gpt4 book ai didi

java - 正则表达式捕获组并忽略最后两个字符(其中一个是可选的)

转载 作者:行者123 更新时间:2023-11-30 01:40:48 29 4
gpt4 key购买 nike

我需要从输入字符串中捕获两个组。这些值的结构在出现时有所不同。

以下是传入字符串的示例:

Comment = "This is a comment";

NumericValue = 123456;

我想要完成的是将等号左侧的字符串值捕获为一组,将等号后面的值捕获为第二组。切勿包含分号。

需要注意的是,如果第二组是字符串,则两端的引号不得包含在该捕获组中。

预期结果是:

  1. Comment = "这是一条评论";
    • 关键组 => 评论
    • 值组 => 这是一条评论
  2. 数值值 = 123456;
    • 键组 => NumericValue
    • 值组 => 123456

以下是我目前所掌握的内容。这对于捕获数值来说效果很好,但在捕获字符串值时会留下结尾双引号。

(?<key>\w+)\s*=\s*(?:[\"]?)(?<group>.+(?:(?=[\"]?;)))

编辑

当对字符串值应用正则表达式时,它必须允许捕获字符串中的分号和双引号,并且仅忽略结束的引号。

所以,如果我们有一个输入:

Comment = "This is a "comment"; This is still a comment";

第二个捕获组应该是:

This is a "comment"; This is still a comment

最佳答案

一个选项是使用交替,您必须检查组 2 或组 3:

(?<key>\w+)\h*=\h*(?:"(.*?)"|([^"\r\n]+));$
  • (?<key>\w+)key匹配 1+ 个单词字符
  • \h*=\h*匹配=可选水平空白字符之间
  • (?:非捕获组
  • "(.+?)"在组 2 中捕获 1+ 次 " 之间的任何字符
    • |或者
    • ([^"\r\n]+)捕获组 3,匹配除 " 之外的任何字符 1+ 次或换行符
  • );关闭非捕获组并匹配;
  • $字符串结尾

Regex demo

在Java中

String regex = "(?<key>\\w+)\\h*=\\h*(?:\"(.*?)\"|([^\"\\r\\n]+));$";

关于java - 正则表达式捕获组并忽略最后两个字符(其中一个是可选的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080685/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com