正则表达式匹配 Java 中的未转义逗号

2024-07-01

问题描述

我试图使用 String 类提供的 split() 方法将 a 拆分为单独的字符串。文档告诉我,它将围绕参数的匹配进行拆分,参数是正则表达式。我使用的分隔符是逗号,但逗号也可以转义。我使用的转义字符是正斜杠 / (只是为了让事情变得更容易,不使用反斜杠,因为这需要在 Java 和正则表达式中的字符串文字中进行额外的转义)。

例如,输入可能是这样的:

a,b/,b//,c///,//,d///,

输出应该是:

a
b,b/
c/,/
d/,

因此,应该在每个逗号处分割字符串,除非该逗号前面有奇数个斜杠 (1, 3, 5, 7, ..., ∞),因为这意味着逗号被转义。

可能的解决方案

我最初的猜测是这样分割它:

String[] strings = longString.split("(?<![^/](//)*/),");

但这是不允许的,因为 Java 不允许无限的后向组。我可以通过将 * 替换为 {0,2000} 将重复次数限制为 2000:

String[] strings = longString.split("(?<![^/](//){0,2000}/),");

但这仍然对输入施加了限制。所以我决定将递归从后向组中剔除,并提出了这个:

String[] strings = longString.split("(?<!/)(?:(//)*),");

但是,它的输出是以下字符串列表:

a
b,b (the final slash is lacking in the output)
c/, (the final slash is lacking in the output)
d/,

为什么第二个和第三个字符串中的斜杠被省略,我该如何解决它(在Java中)?


你已经很接近了。要克服后向错误,您可以使用以下解决方法:

String[] strings = longString.split("(?<![^/](//){0,99}/),")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式匹配 Java 中的未转义逗号 的相关文章

随机推荐

  • Samsung Galaxy J1 4G 上的 webRTC 应用程序崩溃

    我正在开发视频通话 Android 应用程序 该应用程序可以在 Nexus 4 Moto g2 Moto g3 Moto e 等设备上进行视频通话 但当我在 Samsung Galaxy J1 4G 上拨打电话时 它崩溃了 这是堆栈跟踪 E
  • Python 文件打开并立即关闭

    尝试首先通过 powershell 然后通过 cmd 运行此代码 甚至简单地单击它 我正在输入 start python myfile py 来运行它 在每种情况下 文件都会在屏幕上闪烁并立即关闭 我查看它的唯一方法是将文件直接拖到cmd中
  • 如何反向遍历 C# 集合?

    是否有可能有一个foreach将以相反顺序遍历 Collections 对象的语句 如果不是foreach声明 还有其他方法吗 你可以用普通的for向后循环 如下所示 for int i collection Count 1 i gt 0
  • 如何获取 Tkinter 标签文本?

    我正在制作一个用户将从中选择的地址列表 并且将返回地址文本 我需要使用Tkinter Label因为Tkinter Listbox不允许换行 关键是没有 get Label 类中的类似方法 我知道我可以做类似的事情 v StringVar
  • 在进程之间共享列表的正确方法?

    我想设置两个子流程 其中subprocess1不断生成数据 类型为list and subprocess2负责处理发来的数据subprocess1 I used multiprocessing Manager list 创建共享列表 但这是
  • 如何使用 Sublime Text 2 让rails_footnotes 打开文件?

    我不是问如何告诉脚注如何做到这一点 我在initializers footnotes rb file Footnotes Filter prefix txmt open url file s line d column d 我的问题是应该用
  • 如何在不缓冲的情况下从 WCF 流式传输响应?

    我有一个宁静的 webHttpBinding 自托管WCF服务 大多数方法都会向客户端返回 xml 或 json 版本的对象 我有几个触发长时间运行的方法的 GET 方法 我想将日志响应流式传输到浏览器 或应用程序 以便用户知道发生了什么
  • Oreo 8.0 -“sendTextMessage()”未将消息保存到已发送文件夹

    我尝试使用 sendTextMessage 或 sendMultipartTextMessage 从我自己的应用程序发送短信 对于高于 API 19 KitKat 的手机 此消息将保存到已发送文件夹中 然而 在我的 Android 8 0
  • Recaptcha - 表单定制

    有谁知道 recaptcha 是否可以在没有默认框架的情况下完全自定义 我需要验证码图像和输入字段只有一定的宽度 以前有人成功做到过吗 您可以使用 自定义 主题选项指定自定义标记 方法是在页面上包含类似以下内容 然后 您在页面上创建一个 d
  • 使用具有聚类数据的小鼠进行插补

    所以我正在使用mice用于估算缺失数据的包 我是插补新手 所以我已经到了一定程度 但遇到了陡峭的学习曲线 举一个玩具例子 library mice Using nhanes dataset as example df1 lt mice nh
  • Maven 配置文件并安装

    如果我为一个应用程序设置了 Maven 构建 并为不同的环境设置了配置文件 比如 prod 与 dev 定义不同的数据库设置等 那么 安装 目标似乎没有意义 因为我不这样做不知道我的存储库中安装了哪个环境 我刚刚获得 com example
  • 在 scipy 中按稀疏矩阵分组并返回一个矩阵

    关于使用 SO 处理有几个问题groupby与稀疏矩阵 然而输出似乎是列表 字典 https stackoverflow com questions 35410839 group by on scipy sparse matrix 数据框
  • C++:空类的对象的大小是多少?

    我想知道可能是什么空类对象的大小 肯定可以not为 0 字节 因为它应该可以像任何其他对象一样引用和指向它 但是 这样的物体有多大呢 我用了这个小程序 include
  • GNAT 编程套件 - 未找到源文件

    Ada 对我来说还是个新手 所以我正在尝试找到 GPS IDE 的方法 我之前问了另一个问题 但我认为这个问题优先于那个问题 并且可能是我麻烦的根源 当我编译时 我收到一长串 警告 源文件 未找到 在我的 gpr 文件中 我列出了所有规范和
  • 在 AngularJS 模型更改后更新 MathJax

    我正在尝试使用 AngularJS 双向绑定文本 其中包括 Latex 样式方程 我想调用 MathJax 来格式化方程 但我不确定确保 AngularJS 完成更改模型后调用 MathJax 的最佳方法 我想我需要回电 这是我的 Java
  • 如何在WAMP服务器中使用.htaccess?

    我在网上搜索了 2 天 我尝试在本地 wamp 中使用 htaccess 但我不能 我知道有问题 但不知道问题出在哪里 First 我激活了 重写模块 在 apache 菜单中 然后我检查了 phpinfo 页面 我看到该模块添加到了它的
  • NServiceBus 重试延迟

    配置 编码的最佳方式是什么N服务总线 http particular net nservicebus延迟重试消息 在其默认配置中 重试几乎立即发生 最多达到配置文件中定义的尝试次数 理想情况下 我想在一小时后重试 等等 另外 如何Handl
  • jQuery - 如何替换单击元素上的 img src?

    HTML div a href path to image1 jpg img src scripts timthumb php src path to image1 jpg w 200 h 20 alt Image name1 a div
  • 在 Bookdown 上指定 csl 后自定义或删除参考标题

    I specified a csl bibliography style as described by this method https stackoverflow com questions 50652853 how to speci
  • 正则表达式匹配 Java 中的未转义逗号

    问题描述 我试图使用 String 类提供的 split 方法将 a 拆分为单独的字符串 文档告诉我 它将围绕参数的匹配进行拆分 参数是正则表达式 我使用的分隔符是逗号 但逗号也可以转义 我使用的转义字符是正斜杠 只是为了让事情变得更容易