使用正则表达式的codingbat wordEnds

2023-12-05

我正在尝试解决wordEnds来自codingbat.com使用正则表达式。

给定一个字符串和一个非空单词字符串,返回由字符串中该单词每次出现之前和之后的每个字符组成的字符串。忽略单词前后没有字符的情况,如果字符位于两个单词之间,则可能会包含两次。

wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
wordEnds("XYXY", "XY") → "XY"

这是最简单的,因为我可以用我目前的正则表达式知识来做到这一点:

public String wordEnds(String str, String word) {
  return str.replaceAll(
     ".*?(?=word)(?<=(.|^))word(?=(.|$))|.+"
       .replace("word", java.util.regex.Pattern.quote(word)),
     "$1$2"
  );
}

replace用于放置在实际中word字符串到模式中以提高可读性。Pattern.quote不需要通过他们的测试,但我认为这是基于正则表达式的正确解决方案所必需的。

正则表达式有两个主要部分:

  • If after matching as few characters as possible ".*?", word can still be found "(?=word)", then lookbehind to capture any character immediately preceding it "(?<=(.|^))", match "word", and lookforward to capture any character following it "(?=(.|$))".
    • 最初的“if”测试确保原子后向捕获仅当存在word
    • 使用前瞻捕获后续字符不会消耗它,因此它可以用作进一步匹配的一部分
  • Otherwise match what's left "|.+"
    • 第 1 组和第 2 组将捕获空字符串

我认为这在所有情况下都有效,但显然相当复杂。我只是想知道其他人是否可以建议一个更简单的正则表达式来做到这一点。

注意:我不是在寻找使用的解决方案indexOf和一个循环。我想要一个基于正则表达式的replaceAll解决方案。我还需要一个可以通过所有codingbat 测试的有效正则表达式。


我设法减少了这种情况的发生word模式内只有一个。

".+?(?<=(^|.)word)(?=(.?))|.+"

我仍在寻找是否可以进一步简化这一点,但我还有另一个问题:

  • 通过这个最新的模式,我简化了.|$只是.?成功了,但如果我同样尝试简化^|. to .?它不起作用。这是为什么?

根据您的解决方案,我设法简化了代码:

public String wordEnds(String str, String word) {
  return str.replaceAll(".*?(?="+word+")(?<=(.|^))"+word+"(?=(.|$))|.+","$1$2");
}

另一种写法是:

public String wordEnds(String str, String word) {
  return str.replaceAll(
     String.format(".*?(?="+word+")(?<=(.|^))"+word+"(?=(.|$))|.+",word),
     "$1$2");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式的codingbat wordEnds 的相关文章

  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • Java:为什么.class文件中的方法类型包含返回类型,而不仅仅是签名?

    class 文件的常量池中有一个 NameAndType 结构 它用于动态绑定 该类可以 导出 的所有方法都被描述为 签名 返回类型 喜欢 getVector Ljava util Vector 当某些 jar 中方法的返回类型发生更改时
  • 替换 Greasemonkey 中的部分 URL

    我正在尝试使用 Greasemonkey 脚本替换 url 的一部分 但很难实现我想要做的事情 原始网址如下 http x1 example to images thumb 50 157 1571552600 jpg http x2 exa
  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • Java:一种将 Mime(内容)类型与 CommonsMultipartFile 中的文件扩展名相匹配的方法

    在我的公司 出于额外原因 我需要将 mime 类型与文件扩展名进行比较 我有一个CommonsMultipartFile 我正在尝试找出进行这种比较的最佳方法 我见过一个MimetypesFileTypeMap 但不确定这是否适用于此 我试
  • 当前平台不支持桌面 API

    我遇到过这个错误 java lang UnsupportedOperationException 当前平台不支持桌面 API 我将从我的 java 应用程序中打开一个文件 我用这个方法 Desktop getDesktop open new
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • java彩色滚动条搜索结果

    我将如何在 Java 中自定义滚动条 以便我可以进行像 chrome 一样的搜索 也就是说在结果所在的位置放置彩色条纹 我不想要一个库 因为我更喜欢自己编写代码 另外 我不想失去我拥有的 L F 欢迎举例 实际上 它将查看一个大的文本文件或
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 如何在 TCL/EXPECT 中使用 $expect_out 分配变量?

    如果我想匹配DEF 23使用以下正则表达式 expect re DEF 0 9 set result expect out 1 string 为什么它说no such element in array 如何 expect out工作 以及我
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 为什么/何时应该使用泛型方法?

    学习Java的时候遇到过通用方法 public
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐

  • 分析句子的意思

    有没有什么工具可以分析给定句子的含义 非常感谢您的建议 提前致谢 我也在寻找类似的工具 我最近发现的一件事是这样的sentiment analysis由斯坦福大学的研究人员开发的工具 它提供了分析给定句子的情感的模型 这很有趣 即使这个看似
  • OS X 软件包安装问题:找不到 gfortran 4.8 来构建软件包

    我在使用 Xcode 7 的 mac os x El Capitan 上遇到问题 我使用的是 fortran 6 1 从以下位置下载https gcc gnu org wiki GFortranBinaries 我尝试降级到 fortran
  • 更改 R 中 3d 图中轴标题和标签的方向?

    我有一个问题对于 R 绘图专家来说可能很容易 我需要在R中绘制3D图 我的数据如下 df lt data frame a1 c 489 4 505 8 525 8 550 2 576 6 a2 c 197 8 301 389 8 502 5
  • 如果任务尚未开始,调用Task.wait可能不会等待?

    我正在阅读 Jeffrey Richter 的 clr via c 书 读到任务等待可能并不总是等待时感到不舒服 我引用 当一个线程调用Wait方法时 系统会检查Task是否 线程正在等待的线程已开始执行 如果有的话 那么 调用 Wait
  • $(document).ready 相当于没有 jQuery

    我有一个使用的脚本 document ready 但它不使用 jQuery 中的任何其他内容 我想通过删除 jQuery 依赖来减轻它的负担 我怎样才能实现我自己的 document ready不使用 jQuery 的功能 我知道使用win
  • 使用 Webdriver 的 Eclipse for Java 中的字符编码问题

    我目前正在使用 Eclipse 和 TestNG 通过 java 运行 selenium webdriver 我正在使用 Jexcelapi 从 OpenOffice 电子表格 导入数据 以将我正在测试的网站上的字符串与电子表格中的值进行比
  • 集群环境上的 Spring Batch - Websphere

    我确实设置了一个 Spring Batch 作业 它在单个 JVM 上运行良好 但我需要将其部署到集群环境中 我正在使用 Spring 任务调度程序来安排工作 有没有什么方法可以在集群环境中做到这一点 如果一个节点出现故障 另一个节点应该将
  • Facebook cURL 以我身份发帖?

    创建 Facebook 应用程序 使用 cURL 从应用程序发布消息 但它似乎是由我发布的 我怎样才能从应用程序发布 这是我的 cURL attachment array access token gt token message gt m
  • 由于循环导入而无法导入 opencv

    当尝试在 jupyter 实验室笔记本中导入 opencv 时 import cv2 我收到此错误 AttributeError 部分初始化的模块 cv2 没有属性 gapi wip gst GStreamerPipeline 很可能是由于
  • 如何在 Android 上创建 .csv

    我的目标是从表格创建 csv 文件 以打印报告 然后我可以将此 csv 文件存储到我的 SD 卡中 我已经提到了一些与此类似的问题 但他们要求提供一个 jar 文件 有没有其他方法可以不用jar文件来集成呢 在组件 au com bytec
  • MVVM - WPF DataGrid - AutoGenerateColumn 事件

    我目前正在仔细查看出色的Laurent 的工具包和我有以下问题 从 Blend 4 开始 我为 Loaded 事件添加了一个 EventTrigger 在我的 ViewModel 中我有以下内容 public RelayCommand rc
  • 内部录音程序[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 注意 这不是需要使用麦克风的东西 我想在内部录制音频 我想用 C 或 Java 编写一个程序来记录发送到计算机扬声器的音频数据 最终产品将允许用户点击 录制 按钮 当前正在播放的
  • For 循环影响递归变量

    我正在尝试使用递归创建一个函数 该函数可以从帕斯卡三角形内的任何序列中获取任何项 基本上使用自然数作为第一个集合的加法序列 然后使用之前的每个集合作为加法序列 始终从 1 开始 单纯形数 我目前正在学习 JavaScript 并正在做我已经
  • 自定义hugo学术主题中的“关于”小部件

    我通过 RStudio blogdown 使用hugo academic 主题来构建我的网页 示例页面在这里 https themes gohugo io theme academic 我想添加第二份非学术清单兴趣低于学术的 这可能吗 在配
  • 将字符串中的整数提取到数组中

    我需要提取integers from a String到一个数组中 我已经得到了integers 但我无法将它们放入数组中 public static void main String args String line First numb
  • 如何根据条件和参数数量启用结构体?

    我想创建一个元函数 如果向其传递超过 1 个参数 则返回特定类型 如果仅向其传递一个参数 则返回基于条件的另一种类型 该条件是任意的 因此需要enable if或类似的东西 但对于这个例子 我只是将其作为类型比较 让我们将其简化为以下内容
  • 估计全局辐照度的漫射和直接分量

    我正在寻找分离全局辐照度的漫射和直接分量 并找到了 Erbs 模型来在 pvlib 中执行此操作 请参阅pvlib irradiance erbs 但是 我得到了非常奇怪的结果 我预计直接法向辐照度 DNI 会低于全局水平辐照度 GHI 或
  • 找不到-lpthread

    我正在尝试交叉编译 samba 服务器 config 工作得很好 但是当我想用 make 构建时 提示说 Linking shared library bin libsmbclient so 0 opt qnx630 host linux
  • Powershell Import-CSV 如何跳过直到基于字符串的特定行?

    你好 我的 CSV 文件是这样的 BEGINPROPERTIES total candidate create 2 duration 0 00 00 433 internal audit session id 1397055568 inte
  • 使用正则表达式的codingbat wordEnds

    我正在尝试解决wordEnds来自codingbat com使用正则表达式 给定一个字符串和一个非空单词字符串 返回由字符串中该单词每次出现之前和之后的每个字符组成的字符串 忽略单词前后没有字符的情况 如果字符位于两个单词之间 则可能会包含